排序算法實現及複雜度分析(三)

3、選擇排序

    選擇排序的基本思想是:每一趟在n-i+1i=1,2,….,n-1)個記錄中選取關鍵字最小的記錄作爲有序序列的第i個記錄。屬於選擇排序的有簡單選擇排序、樹形選擇排序和堆排序等三種算法。

3.1、簡單選擇排序方法:

    簡單選擇排序是選擇排序中最簡單的一種。一趟簡單選擇排序的操作爲:通過n-i次關鍵字間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第 i1<= i <= n)個記錄交換。簡單選擇排序總的時間複雜度是O(n2)

3.2、樹形選擇排序: 

    樹形選擇排序又稱錦標賽排序,是一種按照錦標賽的思想進行選擇排序的方法。首先對n個記錄的關鍵字進行兩兩比較,然後在[n/2]個較小者之間進行兩兩比較,如此重複,直至選出最小關鍵字的記錄爲止。

它的時間複雜度爲O(nlog2n),需要較多的輔助空間。

3.3、堆排序: 

    堆排序只需要一個記錄大小的輔助空間,每個待排序的記錄僅佔用一個存儲空間。堆排序在最壞情況下,其時間複雜度爲O(nlogn)。堆排序方法對記錄數較少的文件並不值得提倡,對n較大的文件還是很有效的,因爲它運行時間主要耗費在建初始堆和建新堆時進行的反覆“篩選”上。

 

4、歸併排序

    歸併排序是又一類不同的排序方法。“歸併”的含義上將兩個或兩個以上的有序表組合成一個新的有序表。它的時間複雜度是O(nlogn)

      上面是用遞歸的方式實現的歸併排序算法,下面是歸併排序的非遞歸實現:

 

 

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