选择排序(Selection Sort)
- 选择排序原理
在每一次的遍历中,都假定第一个索引处的值为最小元素,在与后面索引处的值分别进行比较,如果当前索引的值大于某个索引处的值,则假定其索引处的值为最小值,在遍历完成后找到最小值所在的索引。再交换最小值索引和第一个位置的索引。再重复上面的操作,完成排序。

- 选择排序代码
public class SelectSort {
private static boolean greater(Comparable v, Comparable w){
return v.compareTo(w)>0;
}
private static void exch(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void sort(Comparable[] a){
//外层决定排序的次数
for (int i = 0;i<a.length-1;i++){
//定义一个变量,记录最小元素所在的索引,默认参与选择排序的第一个元素所在的位置为最小元素。
int min = i;
//内层决定比较的次数
for (int j = i+1;j<a.length;j++){
//比较最小索引处的值和j索引处的值
if (greater(a[min],a[j])){
min = j;
}
}
exch(a,i,min);
}
}
}
- 选择排序的时间复杂度和稳定性
选择排序的时间复杂度为:O(n²)
选择排序的稳定性:选择排序时不稳定的算法