數據結構教材之外的排序算法分析

大多數據結構書中,排序這一章的內容基本上都是直接插入排序、折半插入排序、直接選擇排序、起泡排序、堆排序、快速排序、歸併排序、基數排序。這幾種排序方法中,最好的算法的空間複雜度除了快速排序外都是O(1),平均時間複雜度最小爲O(nlogn).

 

前幾天看到下面幾個有效的排序方法,粗略分析下其性能。

鴿巢排序

   鴿巢排序的基本思想是:

               假設我們要排序的數組爲init_array,設其中最大元素爲Max。額外分配一個長度爲Max的int類型數組temp[Max],數組中元素初始都爲0,算法開始循環地將temp中下標爲init_array[i]處的元素置一個常數a(假設爲1);然後從0開始掃描數組init_array,遇到temp中值爲這個常數a的元素時,將其依次存入數組init_array中,此時init_array中存儲的就是已排序的元素。

    整個程序的實現如下所示:

 

    這個算法的時間複雜度爲O(Max),因爲算法的第二次for循環中若把常數設置爲1的話實際只執行1次,可用if(b[i]==1)代替。空間複雜度也爲O(Max),因爲另外開闢了Max的空間。

     鴿巢排序算法的限制條件有兩個:一是數組中存儲的必須是int類型或者轉換爲int類型不丟失真實數據的數據類型;二是必須事先預測到數組中存儲的最大元素,在程序運行過程中求得後因爲不是const值,所以無法用int b[Max] = {0};來初始化數組b.

發佈了29 篇原創文章 · 獲贊 93 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章