选择排序的时间复杂度依然为O(N^2)
一,原始选择排序
最简单最好记的代码,也是最糟糕的排序,称之为暴力排序,时间复杂度为O(N^2),直接上代码吧,除非在面试的时候所有的排序算法都想不起来了,不然不要选择这个排序
// compare
public static boolean more(int v, int w) {
return v > w;
}
// exchange
public static void exchange(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
// selectionSort algorithm
public static void selectionSort(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (more(array[j], array[i]))
exchange(array, i, j);
}
}
}
二. 改进选择排序
即每一次记录下最小值,然后交换,时间复杂度得到2倍的优化。证明如下
代码如下
public static void selectionSort(int[] array) {
for (int i = 0; i < array.length; i++) { // i++
int minIndex = i;
for (int j = i + 1; j < array.length; j++) {
if (more(array[minIndex], array[j]))
minIndex = j;
}
exchange(array, i, minIndex);
}
}