选择排序
第1趟,在待排序记录array[0]~array[array.lenght-1]中选出最小的记录,将它与array[0]交换;第2趟,在待排序记录array[1]~array[array.lenght-1]中选出最小的记录,将它与array[1]交换;以此类推,第i趟在待排序记录array[i]~array[array.lenght-1]中选出最小的记录,将它与array[i]交换,使有序序列不断增长直到全部排序完毕。
时间复杂度:O(n^2)。因为有跳跃式的比较和交换,所以这个算法不稳定。
让我门来分析一下下面的例子:
我们用 java 来实现一下这个算法
public static void selectSort(int[] array){
int temp = 0;
int minIndex = 0;
for(int i = 0;i < array.length;i++){//比较的趟数
minIndex = i;
for(int j = i+1;j < array.length;j++){//每次比较它前面的都已经排好序了,在未排好序的值里面找出最小值,赋给最前面的额那个数。
if(array[minIndex] > array[j]){
temp = array[minIndex];
array[minIndex] = array[j];
array[j] = temp;
}
}
}
}
测试:
public static void main(String[] args){
int[] array = {23,31,12,21,3,1,5};
selectSort(array);
show(array);
}
结果:1 3 5 12 21 23 31