从第一个元素开始扫描剩下的n-1个元素,找到它的最小元素,然后个第一个元素交换,将最小元素放到它在有序列表的最终位置上。然后从第二个元素开始,扫描剩下的n-2个元素,找到第二最小元素,再和第二个元素交换位置,把第二个最小元素放在有序列表的最终位置上。故可得到一般性解释即从第i个元素开始,从剩下的n-i个元素中找到第i个最小元素再和第i个位置进行交换,最终得到i在序列中的最终位置。
伪代码:算法 SelectionSort(A[0...n-1]) //该算法用选择排序进行排序 //输入:一个可排序数组A[0...n-1] //输出:升序排列的数组A[0...n-1]
for i <- 0 to n-2 do
Min <- i
for j <- i+1 to n-1 do
if A[ j ] < A[ Min ] Min <- j
Swap A[ i ] and A[ Min ]
选择排序基于C++的实现void selectionSort(int A[]){
for(int i = 0; i <= n-2; i++){
int Min = i; //初始最小秩为i
for(int j = i+1; j <= n-1; j++){
if(A[j] < A[Min]) //扫描过程中发现小于A[Min]的元素并
Min = j; //重新更新新最小元素的秩
}
swap(A[i],A[Min]); //交换位置i和Min的值
}
}
算法的时间效率
该算法的基本操作时键值的比较A[ i ] < A[ Min ],这个比较的执行次数仅仅依赖于数组的规模,并由下面的求和公式给出:
时间效率:
对于任何输入来说,选择排序都是一个平方级算法,但键的交换次数仅为线性级,这个特性使得选择排序算法优于许多其他的排序算法。



