- 首先找到数组中最小的那个元素,将它和数组中的第一个元素交换位置。接着在剩下的元素中找到最小的元素,将它和数组的第二个元素交换位置。如此反复,直到将整个数组排序。
- 选择排序的运行时间和元素的初始顺序无关。
- 选择排序是不稳定的。(不稳定是指可能会交换相等元素的位置)
平均 |
最好 |
最坏 |
空间 |
稳定性 |
O(n^2) |
O(n^2) |
O(n^2) |
O(1) |
不稳定 |
public class SelectSort {public static void sort(int[] a) {for (int i = 0; i < a.length; i++) {
// 首先把 min 指向第 i 个元素
int min = i;
// 每次循环从未排序数字中找出最小数的索引,并赋值给 min
for (int j = i + 1; j < a.length; j++) {if (a[j] < a[min]) {min = j;}
}
// 交换 a[i] 和 a[min]
int t = a[i];
a[i] = a[min];
a[min] = t;
}
}
public static void main(String[] args) {
// 随机输入数字
Random random = new Random(47);
int[] a = new int[10];
for (int i = 0; i < a.length; i++) {a[i] = random.nextInt(10);
}
System.out.print("排序前:");
for (int x : a) {System.out.print(x+" ");
}
// 选择排序
SelectSort.sort(a);
System.out.println();
System.out.print("排序后:");
for (int x : a) {System.out.print(x+" ");
}
}