天天看點

7.4.1簡單選擇排序

選擇排序的基本思想是:每趟(例如第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的相對次序已經發生了變化。是以,簡單選擇排序是一個不穩定的排序過程。