select

command
v0.0.0-...-a72d83e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 20, 2020 License: Apache-2.0 Imports: 2 Imported by: 0

README

选择排序

选择排序和插入排序类似,将集合分成了两部分:[有序, 无序]

  • 插入排序:逐个遍历无序元素,在有序区间的合适位置插入
  • 选择排序:找到无序区间的最小值,追加到有序区间

排序过程

整个排序过程十分直观,如数组 [29, 10, 14, 37, 13]

select_sort $ go run main.go
[UNSORTED]:      [29 10 14 37 13]
[DEBUG min]:     10		# 无序区间最小值为 10,此时数组为 [10 29 14 37 13]
[DEBUG min]:     13		# [10 13 14 37 29]
[DEBUG min]:     14		# [10 13 14 37 29]
[DEBUG min]:     29		# [10 13 14 29 37]
[SORTED]:        [10 13 14 29 37]

复杂度

时间复杂度

最好情况:已有序,每个元素交换 0 次

最坏情况:逆序,每个元素交换 n-1 次

平均复杂度:由于比较次数始终都是 ,复杂度为 O(N^2)

空间复杂度

原地排序:O(1)

稳定性

本例的选择排序,从无序区间中从前往后遍历选出最小值,保持了相同元素间的顺序,是稳定的。

如:[2, 1, 8, 1] 最终排序完毕是 [1, 1, 2, 8],两个 1 的相对位置未发生改变。

使用场景

选择排序的实现未使用额外空间,直接在原地进行排序,适用于对空间复杂度要求较高的排序场景。同时它的时间复杂度并不低,和插入排序一样只适用于小数据量排序。

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL