选择排序
在未排序序列中找到最小元素,存放到排序序列起始位置。再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。(或者每次在未排序的数组中找最大值,加入排序序列)
复杂度分析: 时间复杂度O(N^2),空间复杂度O(1)。
(图片来自CSDN博主Zandz_)
public class SelectionSort {
public static void selectionSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
//每次都与后面比较,所以只需要循环到索引为len-2
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;
}
}
}
}