选择排序思想: 以从小到大排序为例,每一轮以第1个未排序的数作为最小值,记下下标,和后面的值依次进行比较,若后面的值比最小值小,那么更新最小值的下标,直到这轮比较完,会找到一个最小值,然后将最小值和第一个数进行值交换。下一轮以第2个数为最小值的下标,进行比较。总共需要n-1次比较。
public static int[] select(int[] num) {
int min;
int temp;
for (int i = 0; i < num.length - 1; i++) {
min = i;
for (int j = i; j < num.length; j++) {
if (num[j] < num[min]) {
min = j;
}
}
if (min != i) {
temp = num[min];
num[min] = num[i];
num[i] = temp;
}
}
return num;
}
时间复杂度:O(n^2)相比较冒泡排序,每次比较后,只更新最小值的下标,每轮循环值最多只做一次值交换。时间上得到了很大的提升。但是也是使用了双层循环,时间复杂度和冒泡排序的一样。