选择排序
选择排序 (selection sort)的工作原理非常直接:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。
算法原理
排序数组:(2 4 3 1 5 2)
- (2 ++4 3 1 5 2++ ):2依次和
4 3 1 5 2
比较, i f ( 2 > o t h e r ) ⇒ i n d e x = m i n I n d e x if(2>other) ⇒ index=minIndex if(2>other)⇒index=minIndex,比较完后,交换元素位置。 - (1 4 ++3 2 5 2++ ):4依次和
3 2 5 2
比较,同理得到最小元素的index,比较完后,交换元素位置。 - (1 2 3 ++4 5 2++ ):3依次和
4 5 2
比较,同理,交换元素位置。 - (1 2 2 4 ++5 3++)
- (1 2 2 3 5 ++4++)
- (1 2 2 3 4 5)
💡Idea
根据上述推导过程,可以使用 f o r for for嵌套循环
- 外层用于遍历每个比较的元素
- 内层则用于控制剩下的元素区间(下划线)
T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2)
Coding
java
public class bubbleSort {
public static void main(String[] args) {
int[] nums={1,4,6,4,5};
bubbleSorted(nums);
for(int i:nums){
System.out.println(i);
}
}
/**
* 冒泡排序
* @param nums
*/
public static void bubbleSorted(int[] nums){
int n= nums.length;
for(int i=n-1;i>0;i--){
for(int j=0;j<i;j++){
if(nums[j]>nums[j+1]){
int tmp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=tmp; //大的向右边移动
}
}
}
}
}
更多有趣内容访问https://github.com/TheRainbow5
参考文献
[1] https://www.hello-algo.com/chapter_sorting/selection_sort/