思路:
- 维护以下定义:
- 数组[0..i)始终是排好序的。
- 数组[0..i)中的每一个数均不大于数组[i..n - 1]中的数
- 每次从 i 右边的数取出最小的数放在i处
- i初识为0,每次递增1
复杂度
- 时间复杂度:平均n2, 最坏n2, 最好n
- 空间复杂度:1
代码
/**
* 选择排序
*/
public class SelectSort {
public static <T extends Comparable> void sort(T[] arr) {
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
//从剩下的元素中挑出最小的那一个
for (int j = i; j < arr.length; j++)
if (arr[j].compareTo(arr[minIndex]) < 0)
minIndex = j;
//和当前位置交换
T temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}