简单选择排序的过程为:第1次,从n个记录中找出关键码最小的记录与第1个记录交换,第2次,,从第2个记录开始的n-1个记录中再选出关键码最小的记录与第2个记录交换;如此,第i次,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。
例:3,1,4,2
第1次·:1,3,4,2
第2次:1,2,4,3
第3次:1,2,3,4
- 时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 复杂性:简单
public class SimpleSelectSort {
public void selectionSort(int[] arr) {
// 需要遍历获得最小值的次数
// 要注意一点,当要排序 N 个数,已经经过 N-1 次遍历后,已经是有序数列
for (int i = 0; i < arr.length - 1; i++) {
int min = i; // 用来保存最小值得索引
// 寻找第i个小的数值
for (int j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j])
min = j;
}
// 若min有变化,就将找到的第i个小的数值与第i个位置上的数值交换
if (min != i) {
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
}
}
测试代码
public class Test {
public static void main(String[] args) {
int[] a = { 10, 7, 3, 5, 9, 1, 6, 8, 2, 4 };
System.out.println("排序前:" + Arrays.toString(a));
SimpleSelectSort simpleSelectSort = new SimpleSelectSort();
simpleSelectSort.selectionSort(a);
System.out.println("简单选择排序后:" + Arrays.toString(a));
}
}
运行结果