描述
首先,找到数组中最小的元素,其次,将它和数组的第一个元素交换位置。再次,在剩下的元素中找到最小的元素,再与数组的第二个元素交换位置。如此往复,直到将整个数组排序。
特点
每次交换都能排定一个元素,因此交换的总次数是N,所以算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序大约需要 N2/ 2 次比较和N次交换。
运行时间和输入无关 : 一个已经有序的数组和一个随机排列的数组排序时间是一样长的。
数据移动是最少的: 每次交换都会改变两个数组元素的值,交换次数和数组大小是线性相关的。
代码实现
public static void selectSort(int[] a) {
for (int i = 0; i < a.length; i++ ){
int min = i;
for (int j = i+1; j < a.length; j++) {
if (a[j] < a[i]) {
min = j; // 找到最小元素下标
}
}
// 交换位置
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}