1. 选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35


/**
* 选择排序
* O(n^2)、O(n^2)、O(n^2)
* 选择排序是一种简单的排序算法,
* 其核心思想是每次从未排序部分中选择最小(或最大)的元素,
* 将其放到已排序部分的末尾,直到所有元素都排序完毕。
*
*/
public static int[] selectionSort(int[] arr){
int n;
if (arr == null || (n = arr.length) <= 1){
return arr;
}
// 遍历数组,从第一个元素到倒数第二个元素
for(int i = 0; i < n - 1; i++){
// 假设当前索引 i 的元素是最小值
int minIndex = i;
// 在未排序部分中查找最小元素的索引
for(int j = i + 1; j < n; j++){
if(arr[j] < arr[minIndex]){
minIndex = j; // 更新最小元素的索引
}
}
// 将找到的最小元素与当前元素交换
if(minIndex != i){
int tmep = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmep;
}
}
return arr;
}