简单选择排序的工作原理
选择排序(Selection sort)是一种简单直观的排序算法。
它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n个元素的表进行排序总共进行至多 n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
维基百科的例子如下图:
时间复杂度分析
当i=1时,需进行n-1次比较;
当i=2时,需进行n-2次比较;
依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。
案例分析
以排序数组{3,2,1,4,6,5}为例
代码实现
public class SimpleSort {
private static void simpleSort(){
int[] number = {2,3,4,1,6,5};
int length = number.length;
for (int i=0; i<length-1;i++){//只会进行5轮
int min_index = i;
for(int j = i+1;j<length;j++){//每轮的比较
if(number[min_index]>number[j]){//找到最小值得下标
min_index =j;
}
}
if(min_index!=i){//交换最小数number[min_index]和第i位数的位置
int temp = number[min_index];
number[min_index] = number[i];
number[i] =temp;
}
System.out.print("第"+(i+1)+"次排序:");
for(int k=0; k<length;k++){
System.out.print(number[k]+" ");
}
System.out.println("");
}
}
public static void main(String[] args){
simpleSort();
}
}
第1次排序:1 3 4 2 6 5
第2次排序:1 2 4 3 6 5
第3次排序:1 2 3 4 6 5
第4次排序:1 2 3 4 6 5
第5次排序:1 2 3 4 5 6