1.選擇排序
1.1 選擇排序的基本介紹
選擇排序類似於冒泡排序,均屬於內排,也可以看做是對冒泡排序的優化。因爲冒泡排序是比較相鄰的兩個值,然後直接交換。而選擇排序是找到一個最大值或者最小值之後,再進行交換。
1.2 選擇排序思想
第一次從 arr[0] ~ arr[n-1]中選擇一個最大值或者最小值,與 arr[0] 交換;第二次從 arr[1] ~ arr[n-1]中選擇一個最大值或者最小值,與 arr[1] 交換;
第二次從 arr[2] ~ arr[n-1]中選擇一個最大值或者最小值,與 arr[2] 交換;
依次類推。
1.3 選擇排序的時間複雜度和空間複雜度等
算法名稱 | 平均時間複雜度 | 最好情況 | 最壞情況 | 空間複雜度 | 穩定性 |
---|---|---|---|---|---|
選擇排序 | O(n^2) | O(n) | O(n^2) | O(1) | 穩定 |
2. 代碼演示
/**
* @author shengjk1
* @date 2020/3/30
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {1, 10, 2, 30, -1};
selectSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[i] < arr[j] ? i : j;
}
if (minIndex != i) {
int tem = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tem;
}
}
}
}