选择排序
选择排序原理非常简单:开启一个循环,每轮从为排序区间选择最小的元素,将其放到已排序区间的末尾
有一个长度为n的数组,选择排序流程如下
- 初始状态下,所有元素未排序,即未排序(索引)区间为[0,n-1]
- 选取区间[0,n-1]中的最小元素,将其与索引 处的元素交换。完成后,数组前 1 个元素已排序
- 选取区间[1,n-1]中的最小元素,将其与索引 处的元素交换。完成后,数组前 2 个元素已排序。
- 以此类推。经过n-1轮选择与交换后,数组前n-1个元素已排序。
- 仅剩的一个元素必定是最大元素,无须排序,因此数组排序完成。
/*选择排序*/
func selectionSort(nums []int) {
n := len(nums)
//外循环:未排序区间为[i,n-1]
for i := 0; i < n-1; i++ {
//内循环:找到未排序区间内的最小元素
k := i //用来记录未排序区间最小元素
for j := i + 1; j < n; j++ {
if nums[j] < nums[k] {
//记录最小元素索引
k = j
}
}
//将最小元素与为排序首个元素交换
nums[i], nums[k] = nums[k], nums[i]
}
}
外层循环用来控制未排序区间,内层循环用来找到未排序中最小的元素