本篇為經(jīng)典排序開篇故在此說一下排序的定義
所謂排序即將一組對象按照某種邏輯順序重新排列的過程
---------格嘰格嘰-------------
太長不看版:
1、速度快
2、耗空間
3、穩(wěn)定
先舉個(gè)例子:班級里有五個(gè)同學(xué)在一次考試中分別考了3碰纬、2呐萌、7渗磅、5、1分(滿分十分)
現(xiàn)在要按照從低到高的順序名俗他。桶排序顧名思義當(dāng)然要有桶脖捻,因?yàn)闈M分是十分所以需要0~10共11個(gè)桶。桶準(zhǔn)備好了現(xiàn)在就根據(jù)得分把這幾個(gè)同學(xué)扔到對應(yīng)分?jǐn)?shù)的桶里兆衅。
放好以后從第一個(gè)桶開始把人依次取出來站好隊(duì),這樣隊(duì)伍順序就是按照分?jǐn)?shù)又低到高的排序了嗜浮,沒見過分?jǐn)?shù)從低到高排的羡亩?倒過來抓人就好了!
代碼如下圖(bucket sort img01):
? ? ? 現(xiàn)在可以發(fā)現(xiàn)三個(gè)特點(diǎn):一是待排序?qū)ο蟮臄?shù)量有限危融,二是需要窮舉對象所有的類型(桶)占空間畏铆,第三排序的步驟不受待排序?qū)ο蟪跏紶顟B(tài)的影響所以穩(wěn)定。
? ? ? 以上只是簡單的思想吉殃,還有諸多細(xì)節(jié)需要考慮辞居,如分?jǐn)?shù)會有重復(fù)的、分?jǐn)?shù)可能是會有小數(shù)的蛋勺。實(shí)際使用中不是只對數(shù)字排序的對象會有許多屬性如何按照多屬性排序瓦灶?
現(xiàn)在來了一個(gè)插班生考了7分,這怎么辦抱完?7號桶里塞兩個(gè)就好了...
代碼中的遍歷方法也需要改動一下贼陶,在原基礎(chǔ)上加上對桶數(shù)量的遍歷完整代碼如下(bucket sort img03):
? ? ? ?目前還只是簡版的桶排序,下面說一下同一桶中對象的排序(多字段排序)巧娱,比如說先按分?jǐn)?shù)排分?jǐn)?shù)相同的安裝名字的首字母字典排序(abcd...)碉怔。當(dāng)然同一桶中的對象可以根據(jù)具體情況使用其它合適的排序算法如冒泡排序。
簡單借助list進(jìn)行處理禁添,此處根據(jù)id排序撮胧。代碼如下(bucket sort img04):
參考書籍:
1、《啊哈!算法》
2老翘、《算法》(第四版)