选择排序基本信息
选择排序是一种排序算法,特别是就地比较排序。它具有 O(n2)
时间复杂度,使其在大型列表上效率低下,并且通常比类似的插入排序更差。选择排序因其简单性而着称,并且在某些情况下具有优于更复杂算法的性能优势,特别是在辅助存储器有限的情况下。
该算法将输入列表分为两部分:已经排序的项目子列表,在列表的前面(左侧)从左到右构建,以及剩余要排序的项目的子列表占用其余部分。名单。最初,排序的子列表为空,未排序的子列表是整个输入列表。该算法通过查找未排序子列表中的最小(或最大,取决于排序顺序)元素,与最左边的未排序元素(将其按排序顺序)交换(交换),并将子列表边界向右移动一个元素来继续。
选择排序的伪代码:
function select(list[1..n], k)
for i from 1 to k
minIndex = i
minValue = list[i]
for j from i+1 to n
if list[j] < minValue
minIndex = j
minValue = list[j]
swap list[i] and list[minIndex]
return list[k]
选择排序的可视化:
https://i.stack.imgur.com/LZepY.gif
选择排序示例:
https://i.stack.imgur.com/CaSlf.jpg
辅助空间: O(n)
时间复杂度: O(n^2)