选择排序
选择排序是一种简单的排序算法。该排序算法是一种基于就地比较的算法,其中列表分为两部分,左端的排序部分和右端的未排序部分。最初,已排序部分为空,未排序部分为整个列表。
从未排序的数组中选择最小的元素并与最左边的元素交换,该元素成为已排序数组的一部分。此过程继续将未排序的数组边界向右移动一个元素。
该算法不适用于大型数据集,因为它的平均复杂度和最坏情况复杂度为 Ο(n
2),其中
n 是项目数。
选择排序如何工作?
以下面描述的数组为例。
对于排序列表中的第一个位置,顺序扫描整个列表。当前存储14的第一个位置,我们搜索整个列表,发现10是最小值。
所以我们将 14 替换为 10、经过一次迭代后,恰好是列表中的最小值的 10 出现在排序列表的第一个位置。
对于 33 所在的第二个位置,我们开始以线性方式扫描列表的其余部分。
我们发现 14 是列表中第二低的值,它应该出现在第二位。我们交换这些值。
两次迭代后,两个最小值以排序方式定位在开头。
同样的过程适用于数组中的其余项目。
以下是整个排序过程的图解说明-
现在,让我们学习选择排序的一些编程方面。
算法
Step 1 − Set MIN to location 0
Step 2 − Search the minimum element in the list
Step 3 − Swap with value at location MIN
Step 4 − Increment MIN to point to next element
Step 5 − Repeat until list is sorted
伪代码
procedure selection sort
list : array of items
n : size of list
for i = 1 to n-1
/* set current element as minimum*/
min = i
/* check the element to be minimum */
for j = i+1 to n
if list[j] < list[min] then
min = j;
end if
end for
/* swap the minimum element with the current element*/
if indexMin != i then
swap list[min] and list[i]
end if
end for
end procedure