常用資料結構之桶式排序

2021-09-21 02:08:02 字數 840 閱讀 3199

關於桶式排序,其實以前見到過,當成了乙個排序技巧來記了。具體就是,有乙個序列,有n個數,並且每個數取值範圍是0~100。問如何快速的進行排序。那麼我們可以很容易想到,就是在開乙個大小為一百的陣列,並且初始化為0,然後遍歷所給的序列,比如遍歷到了23,就把23放入新開陣列下標為23的位置上,具體表現在加1,這樣最後在重新遍歷新開的陣列,當元素不為0時輸出下標,這樣序列就從小到大排好了。

其當然有一些弊端,就是資料範圍問題。當序列中有乙個數值是100000,那就得開乙個很大的陣列,顯然,這個演算法還可以優化。那就是我們可以採用多趟排序。其也稱為多關鍵字排序,稱為基數排序。下面舉例說明。如果一段序列,為203,1,23,234,901

2345

6789

第一趟1

2349

第二趟23

234第三趟

203 

排列的最後結果為:1,9,23,203,234。

應尤為注意的是,每個桶內的數字都是有著嚴格的順序的,它們遵從先進先出的原則!第一趟是按個位進行入相應的桶,第二趟是根據十位進行依次入桶,第三趟是根據百位進行入桶。 

下面分析其演算法的時間複雜度:其最好最壞的情況都是o(d*(n+rd))。其中d是進行的趟數,n是序列中元素的個數,rd是桶數,如本個例子是桶數為10。如何理解呢,因為每一趟,我們都需要遍歷n個關鍵字進行入桶。之後再進行第二次入桶時,我們需要遍歷每乙個桶進行收集。所以其時間複雜度是如此。

關於其空間複雜度:是o(rd)。

這個很好理解,因為每個桶就是乙個佇列,需要頭尾指標,所以需要的空間為,o(2*rd),化簡後就是o(rd)。

總結:基數排序是適用於關鍵字較多,而關鍵字的基數較少。如果按26個字母來排,就需要26個桶,這顯然是不合適的。

資料結構之桶排序(python實現)

coding utf 8 每乙個桶代表乙個區間範圍,裡面可以承載乙個或多個元素 1.建立桶,並確定每乙個桶的區間範圍 2.遍歷原始數列,把元素對號入座放入各個桶中 3.對每個桶內部的元素分別進行排序 4.遍歷所有的桶,輸出所有元素 def buckersort string 1.得到數列的最大值 m...

資料結構排序系列詳解之九 桶排序

基本思想 假定輸入是由乙個隨機過程產生的 0,m 區間上均勻分布的實數。將區間 0,m 劃分為n個大小相等的子區間 桶 將n個輸入元素分配到這些桶中,對桶中元素進行排序,然後依次連線桶輸入0 a 1.n 桶 關鍵字 對映函式 bindex f key 其中,bindex 為桶陣列b的下標 即第bin...

資料結構 基數排序(桶排序)

基數排序和計數排序都屬於 非比較排序 有關計數排序可檢視 基數排序介紹 基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作...