核心思想
選擇排序的核心思想如下:
第 i 趟排序從序列的後n-i+1個元素中選擇一個值最小的元素,將其置於該n-i+1個元素的最前面。
通俗點說如下:
每一趟排序從序列中未排好序的元素中選擇一個值最小的元素,將其置於這些未排好序的元素的最前面。
選擇排序的完整過程圖示如下:
算法實現
選擇排序算法的C語言實現如下:
void SELECTSORT(keytype K[ ],int n)
{
int i, j, d;
keytype temp;
for(i=1;i<=n-1;i++){
d=i; //尋找值最小的元素,並記錄其位置
for(j=i+1;j<=n;j++)
if(K[j]<K[d])
d=j;
if(d!=i){ // 最小值元素非未排序元素的第一個元素時
temp=K[d] ;
K[d]=K[i];
K[i]=temp;
}
}
}
算法分析
Q:若原始序列爲一個按值遞增的序列,則排序過程中一共要經過多少次元素之間的比較?若原始序列爲一個按值遞減的序列,則排序過程中要經過多少次元素之間的比較?
A:無論原始序列爲什麼狀態,第i趟排序都需要經過 n-i 次元素之間的比較,因此,整個排序過程中元素之間的比較次數爲 n(n-1)/2,其中
綜上,選擇排序法的元素之間的比較次數與原始序列中元素的分佈狀態無關
選擇排序的時間複雜度爲O(n2),且爲非穩定性排序方法