排序之桶排序

2021-07-12 05:19:49 字數 960 閱讀 8056

本文以《啊哈!演算法》為教材,個人理解整理。

例:老師要給5個小朋友進行打分,滿分為10分,要求將最終的分數從高到低排序後顯示出來。

輸入:5  3  5  2  8

輸出:8  5  5  3  2

桶排序就像它的名字一樣和桶很相似,如分數的範圍為0~10,那就可以分為11個「桶」,分別為:

桶0,桶1,桶2,桶3,桶4,桶5,桶6,桶7,桶8,桶9,桶10。所有的桶一開始都是空的。

如果乙個小朋友得分為5,就在桶5中放入乙個代表物,如旗子,表示得分為5的有1人。同樣地,如果乙個小朋友得分為3,就在桶3中放入乙個旗子,以此類推。

最後,由於要求從高到低排序,因此應該從桶10開始確認每個桶中的旗子數量,有幾個旗子就輸出幾次桶的序號,如桶8乙個旗子,桶5兩個旗子,輸出即為8  5  5。

用c語言表示,需要首先定義乙個11位的陣列a[11],並將a中每個元素都初始化為0,再迴圈5次獲取5個小朋友的成績,獲取的同時將a中對應位置的數值增加1,如得5分則a[5]++,得8分則a[8]++,以此類推。

最後倒序輸出,即從a[10]開始迴圈,根據每個元素的數值輸出相應次數的下標。

int main()

for(i = 0; i < 5; i++)

for(i = 10; i >= 0; i--) //從大到小排序輸出 }

return 0;

}

以上是桶排序最簡單的思路了,今天學習完這個,我思考它的特徵,最初猜測是不是在數值最大和最小範圍確定的情況下(現在我還不考慮效率等其他因素),可以使用桶排序解決。但是思考了下,假如例題中分數下界0是確定的,上界是不確定的情況下,只需判斷5個小朋友分數的最高分,也可獲得乙個符合例題情況的上界。同理,也可以動態獲得乙個下界。

寫著寫著突然覺得其實我可以不用思考這麼多,應用時本身都是需要根據實際情況進行修改的,我從乙個當前定死的演算法上去延伸實際應用,面對的可能是無窮無盡的鬱悶。

排序之桶排序

author mr.du date 2019 02 27 桶排序 桶排序中的桶是什麼概念呢?每乙個桶代表乙個區間範圍,裡面可以承載乙個或多個元素。第一步就是建立這些桶,確定每乙個桶的區間範圍,具體建立多少個桶如何確定它的區間範圍,有很多方法 我們這裡建立的桶數量等於原始數列的元素數量,除了最後乙個桶...

最快排序之 桶排序

桶排序的基本思想就是利用空間換時間,如果將一最大值為100000的一組數進行排序,最簡單粗暴的方法就是桶排序,建立乙個100001這麼大的陣列,每一位代表乙個乙個數,初始化時將陣列全部賦值為零,一次讀入需要排序的數,如果讀入5278則將num 5278 代表出現過一次5278。輸入結束之後,從1開始...

排序演算法之桶排序

1 設定乙個定量的陣列當作空桶子 2 尋訪序列,並且按照要求把記錄乙個乙個放到對應的桶子去 3 對每個不是空的桶子進行排序。4 從不是空的桶子裡把專案再放回原來的序列中。include include include include typedef struct node node,list voi...