1.思路:每次遍历数组未排序部分选出最小值(最大值),与未排序部分的第一个元素交换。
2.图解:对数组[4, 5, 6, 3, 2, 1]进行选择排序,每次交换详细过程如下图所示:
3.代码实现:
public void selectSort (int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
// 假定最小值的下标为i
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
// 改变最小值的下标
min = j;
}
}
// 交换
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
4.性质:
①时间复杂度:O(n^2) ②空间复杂度:O(1) ③原地排序
④非稳定排序:对于数组[4,5,4,6,1],第一次遍历时,会将第一个4和最后的1交换位置,那第一个4和第二个4的顺序就改变了,所以是非稳定排序。