首页 数组排序-选择排序
文章
取消

数组排序-选择排序

选择排序,两层循环,外层循环遍历,在遍历到的元素左侧选择最大值(内层循环)与当前元素互换。相比冒泡排序,性能较优,它是选择一轮后才交换,而冒泡每次都交换。

选择排序时间复杂度为 \(O(n^2)\)。

升序排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 选择排序,升序排序
func selectSortASC(arr []int) []int {

	// 从右往左遍历
	for i := len(arr) - 1; i > 0; i-- {

		// 找到 i 左侧最大的值,与 i 交换
		max := i
		for j := 0; j < i; j++ {
			if arr[max] < arr[j] {
				max = j
			}
		}
		if max != i {
			arr[i], arr[max] = arr[max], arr[i]
		}
	}
	return arr
}

将查找最大值改为查找最小值,即可实现倒序排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 选择排序,倒序排序
func selectSortDESC(arr []int) []int {

	// 从右往左遍历
	for i := len(arr) - 1; i > 0; i-- {

		// 找到 i 左侧最小的值,与 i 交换
		min := i
		for j := 0; j < i; j++ {
			if arr[min] > arr[j] {
				min = j
			}
		}
		if min != i {
			arr[i], arr[min] = arr[min], arr[i]
		}
	}
	return arr
}
本文由作者按照 CC BY 4.0 进行授权