前言
选择排序(Selection Sort),(从小到大的排序)每次选择一个最值放入第一个位置,个人认为原理比冒泡排序的原理更好理解。
基本思路
- 在所有的元素中选择一个最小的元素,与第一个位置的元素交换位置。
- 在剩下的元素中选择一个最小的元素与第二个元素交换位置。
- 重复...
(如果上面的思路描述你没看懂也没关系,看下面的图解)
图解


如何找出最小的元素?第一个元素与相邻的后一个元素比较大小(2<3)。找出两者中较小的一个元素(2)继续与下一个元素(1)比较,直到最后一个元素。这种依次比较的方式是不是跟之前说过的冒泡排序(Bubble Sort)很像,可以参考:高效理解排序之——冒泡排序-JAVA版

也是所有元素中最大的元素,所有第六轮的比较可以省略。
代码实现
import java.util.Arrays;
public class SectionSort {
public static void main(String []args) {
int[] array = new int[]{2,3,1,6,4,5};
sort(array);
System.out.print(Arrays.toString(array));
}
public static void sort(int[] array){
for(int i=0;i < array.length -1; i++){
int minIndex = i;
for(int j = i;j<array.length;j++){
minIndex = array[j] < array[minIndex] ? j:minIndex;
}
// 可以优化,当前位置就是最小无需交换
// if(i == minIndex ) continue;
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
//System.out.println("第"+(i+1)+"轮:"+Arrays.toString(array));
}
}
}
效率分析
时间复杂度: O() 空间负责度: O(1) 稳定性:不稳定
本章关键字:选择 指定位置