目录
一、简介
算法 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|---|
选择排序 | O(n^2 ) | O(n^2) | O(n^2) | O(1) | In-place | 不稳定 |
算法步驟:
二、代码实现
public class SelectionSort {
public static void selectionSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
int minVal = i;
for (int j = i + 1; j < len; j++) {
if (arr[minVal] > arr[j]) {
minVal = j;
}
}
if (minVal != i) {
int tmp = arr[i];
arr[i] = arr[minVal];
arr[minVal] = tmp;
}
}
}
public static void selectionSort2(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
int maxVal = i;
for (int j = i + 1; j < len; j++) {
if (arr[maxVal] < arr[j]) {
maxVal = j;
}
}
if (maxVal != i) {
int tmp = arr[i];
arr[i] = arr[maxVal];
arr[maxVal] = tmp;
}
}
}
public static void main(String[] args) {
int[] arr = {12, 11, 15, 50, 7, 65, 3, 99};
System.out.println("---排序前: " + Arrays.toString(arr));
selectionSort(arr);
System.out.println("选择排序从小到大: " + Arrays.toString(arr));
selectionSort2(arr);
System.out.println("选择排序从大到小: " + Arrays.toString(arr));
}
}
三、应用场景
和冒泡排序一致,相比其它排序算法,这也是一个相对较高的时间复杂度,一般情况不推荐使用。
但是我们还是要掌握冒泡排序的思想及实现,这对于我们的算法思维是有很大帮助的
参考链接:
十大经典排序算法(Java实现)