演算法學習03 桶排序

2021-10-19 02:09:02 字數 834 閱讀 4591

首先遍歷陣列,找到最大值與最小值,設定乙個長度為最大值-最小值+1的陣列,再次遍歷這個陣列,以當前值-最小值作為下標,將該下標的計數器增1。掃瞄一遍計數器陣列,按順序將值收集起來。

舉個例子 nums=[2, 4, 3, 4, 7]

遍歷一次陣列,找到陣列元素的最小值與最大值分別為2和7,那麼我們設定乙個長度為7-2+1的陣列counter,這是乙個計數陣列,每個位置分別代表最小值+小標值 這個數出現的次數,counter[0]代表最小值+0也就是2出現的次數。

遍歷原陣列,陣列中這個數每出現一次,計數陣列的 這個數-最小值的位置計數加一。比如原陣列中3每出現一次,計數陣列counter[當前值3-最小值2]也就是counter[1]的位置上的數自增1,得到了counter=[1,1,2,0,0,1]

根據計數陣列和最小值,寫出排序完成後的陣列,最小值加下標為數,counter對應下標位置的數為重複幾次。

首先遍歷陣列,找到最大值,得到他的位數,然後將其他位數小於此位數的數補齊0。那麼就有基數個桶(一般採用十進位制,也就是10個桶)從最低位個位開始,放入桶中。然後將數從左往右倒出來,按十位數進桶,一直到最高位排序完成,整個序列變成了乙個有序序列。相對於先按最低位排序一次,再次基礎上,高位的數優先順序更高,高位數字一樣的,保留低一位的排序結果,使得整個陣列最終完成排序。

計數排序相對於給最大值與最小值之間的所有數都準備乙個桶,每遍歷獲得其中的乙個數,對應的桶裡的數增1.

基數排序是使用基數個桶,先按個位比較,將結果保留,再按高一位十位排序入桶,十位相同的這些數,個位的排序結果就會保留。最終最高位的數最後排,因為最高位的優先順序最高。

這兩種排序都屬於桶排序,都是不基於比較的排序,應用範圍有限,需要樣本的資料狀況滿足桶的劃分。

python演算法學習之桶排序演算法例項 分塊排序

複製 如下 coding utf 8 def insertion sort a 插入排序,作為桶排序的子排序 n len a if n 1 return a b 結果列表 for a in a i len b while i 0 and b i 1 a i i 1 b.insert i,a retu...

漫畫演算法 學習筆記(03)

3.實現 4.陣列與鍊錶的比較 鍊錶 linked list 是一種在物理上非連續 非順序的資料結構,由若干節點 node 所組成。private static class node 鍊錶的第乙個節點被稱為頭節點,最後乙個節點被稱為尾節點,尾節點的next指標指向null。對於鍊錶的其中乙個節點a,...

排序演算法學習

一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...