简介
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
时间复杂度
O(n^2)
思路分析
排序规则:从小到大
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
比较过程:
代码实现
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {66, 1, 5, 3, 60, 34, 79, 6};
selectionSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectionSort(int[] arr) {
// 最小值索引
int minIndex;
// 最小值
int minVal;
for (int i = 0; i < arr.length - 1; i++) {
// 假定i为最小索引
minIndex = i;
// 假定arr[i]为最小值
minVal = arr[i];
// 循环找出最小的值
for (int k = i + 1; k < arr.length; k++) {
// 如果遇到比最小值还小的值 就赋值更小的值
if (minVal > arr[k]) {
minIndex = k;
minVal = arr[k];
}
}
// 如果minIndex==i的话证明没有遇到更小的值,所以不需要赋值(优化作用)
// 否则就让最小的值和当前值交换位置
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = minVal;
}
}
}
}
运行输出:
[1, 3, 5, 6, 34, 60, 66, 79]
总结
该算法的核心是每次假定当前的元素为最小值,然后和后面的元素一一比较,有更小的元素,则设置更小的元素为最小值,最后交换位置。所有元素循环完成后则排序完成。