排序算法之簡單選擇排序


簡單選擇排序

接下來我們來簡單地學習一下簡單選擇排序。

原理:

通過n-1次關鍵字之間的比較,從n-i+1個記錄中找到關鍵字最小的記錄,並和第i個記錄交換。其實很好理解:在冒泡排序中,我們每次都做了交換,而這里我們不需要每次都進行交換,而是把最大的數(min記錄的是最大值的下標)和第i個記錄交換。

代碼如下:
void simpleChooseSort(int a[],int aLength)
{
    int i,j,min;
    for (i=0; i<aLength; i++) {
        min = i;
        for (j=i+1; j<aLength; j++) {
            if (a[min]<a[j]) {
                min=j;
            }
        }
        if (i!=min) {
            swap(a, i, min);
        }
    }
}

比如說我們待排序的序列是:
{9,1,5,8,3,7,4,6,2}
也就是讓數組第一個元素和后面的每個元素比較,但是比較的過程中不修改不進行交換,而是記錄最大的數據的下標,然后把該最大元素與a[i]進行交換,這樣便可以實現簡單選擇排序。
swap函數如下:

 //交換位置
void swap(int a[],int i,int j)
{
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

主函數如下:

int main(int argc, const char * argv[]) {

    int a[] = {12,34,9,1,5,8,3,7,4,6,2,13,42,16,23};    //length = 15
    simpleChooseSort(a, 15);

    
    return 0;
}

運行結果:

簡單選擇排序算法:42 34 23 16 13 12 9 8 7 6 5 4 3 2 1 

其時間復雜的也是 O(n^2 ),雖然與冒泡排序同是O(n^2 ), 但是簡單選擇排序的性能還是要略優於冒泡排序的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM