鴿巢排序(pigeon sort)

來源:互聯網
上載者:User

鴿巢排序(Pigeonhole sort)

, 也被稱作基數分類

, 是一種時間複雜度

為O

(N+n

)且在不可避免遍曆每一個元素並且排序的情況下效率最好的一種排序演算法. 但它只有在差值(或者可被映射在差值)很小的範圍內的數值排序的情況下實用,同時也要求元素個數(n)和成為索引的值(N)大小相當。

 

作用在數組上,索引時間為常量值O(1),則有

 

最壞時間複雜度: O(N+n)

最好時間複雜度:O(N+n)

平均時間複雜度: O(N+n)



最壞空間複雜度:O(N*n)

 

 

演算法:

1. 給定一個待排序數組,建立一個備用數組(鴿巢),並初始化元素為0,備用數組的索引即是待排序數組的值。

2.把待排序數組的值,放到“鴿巢”裡(即用作備用數組的索引)。

3.把鴿巢裡的值再依次送回待排序數組。

 

演算法虛擬碼(類似Python代碼格式):

 

def  pigeonhole_sort ( array a[n] ) :

        array auxiliary[N] = {0}

        var i ,k

        var j = 0

      

        for i = 0 -> n

                     auxiliary[ a[i] ] ++

        for i = 0 -> N

                    for k = 0 ->auxiliary[i]

                                  a[j++] = i

 

 

c源碼:

 

void pigeonhole_sort(int* array, int length)<br />{<br />int auxiliary[NUM] = {0};<br />int i, k,j = 0;<br />for(i = 0; i < length; ++i)<br />auxiliary[array[i]]++;<br />for(i = 0; i < NUM; ++i)<br />for(k = 0; k < auxiliary[i]; ++k)<br />array[j++] = i;<br />}<br />

 

 




更正:

1.(Dec ,6 ,2010)            最壞空間複雜度應該是O(N+n)
. wikipedia.org的是錯誤的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考:

 

維基百科

wikipedia's pigeonhole_sort

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.