选择排序法,核心思想就是,对于数组 A,假设其长度为 len,则第一次遍历,找到 [0,len-1]
中最小的那一个放在 A[0]
的位置,第二次遍历,找到 [1,len-1]
中最小的那一个放在 A[1]
的位置…
如此循环,直到整个数组有序为止。
该排序是一种不稳定的排序。
public void sort(int[] a) {
if (a == null || a.length == 0) return;
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
// 在内循环里面是固定的,总是拿固定的 a[i] 去与变化的 a[j] 比较
// 不同与冒泡排序
if (a[i] > a[j]) {
sweap(a, i, j);
}
}
}
}
之后想着改进一下,不用每次比较之后都交换,而是如前面提到的,先找到这一次遍历中最小的,然后再交换,提高效率。
public void sort(int[] a) {
if (a == null || a.length == 0) return;
for (int i = 0; i < a.length; i++) {
int minIndex = i;
for (int j = i + 1; j < a.length; j++) {
if (a[minIndex] > a[j]) {
minIndex = j;
}
}
sweap(a, i, minIndex);
}
}
时间复杂度
时间复杂度为 O(n2)
空间复杂度
O(1)