選擇排序的基本思想是:每趟(例如第i趟)在後面 n-i+1(i=1,2,...,n-1)個待排序元素中選取關鍵字最小的元素,
作為有序子序列的第i個元素,直到第n-1趟直到第n-1趟做完,待排序元素隻剩下1個,就不用再選了。
選擇排序的基本思想:假設排序表為L[1...n],第i趟排序即從L[i..n]中選擇關鍵字最小的元素與L[i]交換,每一趟排序可以确定一個元素的最終位置,這樣經過n-1趟排序就可以使整個排序表有序。
簡單選擇排序的僞代碼:
void SelectSort(Elemtype A[],int n){
//對表A進行簡單選擇排序,A[]從0開始存放元素
for(i=0;i<n-1;i++){//一共進行n-1趟
min=i;//記錄最小元素位置
for(j=i+1;j<n;j++){//在A[i...n-1]中選擇最小的元素
if(A[j]<A[min]){
min=j;
}
}
if(min!=i){
swap(A[i],A[min]);//與第i個元素交換
}
}
}
複制
簡單選擇排序算法的性能分析:
空間效率:僅使用常數個輔助單元,故而空間效率為O(1)。
時間效率:簡單選擇排序過程中,元素移動的操作次數很少,不會超過n-1次,最好情況是移動0次,此時對應的表已經有序。
但元素間比較的次數與序列的初始狀态無關,始終是n(n-1)/2次,是以時間複雜度是O(n^2)。
穩定性:在第i趟找到最小元素後,和第i個元素交換,可能會導緻第i個元素和其含有相同關鍵字元素的相對位置發生變化。
例如,表L={2,2,1},經過一趟排序後,L={1,2,2},最終排序序列也是L={1,2,2},顯然,2與2的相對次序已經發生了變化。是以,簡單選擇排序是一個不穩定的排序過程。