常見排序算法(選擇排序-曾經的筆記)

三、選擇排序

1.簡單選擇排序

    思想:總是從其餘部分選擇出最大或最小的記錄到有序子列中, 開始時有序子列的長度爲0,隨着每趟的選擇長度每次增加1

        從程序中可看出,簡單選擇排序移動記錄的次數較少,但關鍵碼的比較次數依然是

2

n(n+1),所以時間複雜度仍爲O(n2)


 

2.錦標賽選擇排序

3.堆排序

    思想:是對錦標賽選擇排序的改進。

    堆的概念:稱n個元素的序列 k1k2,…,k爲堆,當且僅當,若以一維數組存儲一個堆,則堆對應一棵完全二叉樹,且所有非葉結點的值均不大於(或不小於)其子女的值,根結點的值是最小(或最大)的。

        實現堆排序需解決兩個問題:

            1. 如何將n個元素的序列按關鍵碼建成堆;

            2. 輸出堆頂元素後,怎樣調整剩餘n-1個元素,使其按關鍵碼成爲一個新堆。

    堆排序:對n個元素的序列進行堆排序,先將其建成堆,以根結點與第n個結點交換;調整前n-1個結點成爲堆,再以根結點與第n-1個結點交換;重複上述操作,直到整個序列有序。


    效率分析

次,交換記錄至多k次。所以,在建好堆後,排序過程中的篩選次數不超過下式:

           2( ëlog2(n-1)û + ëlog2(n-2)û + + log22û ) < 2( ëlog2(n-1)û + ëlog2(n-2)   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章