算法入門——計數(shù)排序荆陆、桶排序、基數(shù)排序

上篇文章我們學(xué)習(xí)了算法入門——歸并排序集侯、希爾排序被啼,這篇文章我們學(xué)習(xí)算法入門——計數(shù)排序、桶排序棠枉、基數(shù)排序浓体。

計數(shù)排序

計數(shù)排序是已知列表元素的范圍,統(tǒng)計列表元素出現(xiàn)的頻次辈讶,再進行排序命浴,例如:

li=[2,5,2,7,7,7,8]

在上面的列表中,元素2出現(xiàn)了兩次贱除,5出現(xiàn)了一次生闲,7出現(xiàn)了三次,8出現(xiàn)了一次月幌,再通過元素出現(xiàn)的次數(shù)來輸出列表碍讯,示例代碼如下:

def count_sort(li,max_count):
    print('排序前:',li)
    count=[0 for _ in range(max_count+1)]       # 長度為max_count,值全為0的列表
    for val in li:                              # 遍歷列表的值
        count[val]+=1                           # 計數(shù)
    li.clear()                                  # 清空列表
    print('統(tǒng)計列表元素出現(xiàn)的次數(shù)',count)           # 輸出count列表
    for index,val in enumerate(count):          # 遍歷列表的
        for i in range(val):                    # 根據(jù)count列表的值來遍歷幾次
            li.append(index)                    # 添加元素

li=[3,5,2,5,1,1,6,10,9,8]
count_sort(li,10)
print('排序后',li)

運行結(jié)果如下圖所示:



因為列表的下標是從0開始的扯躺,所以統(tǒng)計列表元素出現(xiàn)的次數(shù)為0出現(xiàn)了0次捉兴,1出現(xiàn)了2次蝎困,2出現(xiàn)了一次,3出現(xiàn)了1次等等倍啥。

計數(shù)排序的缺點:

  • 消耗大量內(nèi)存禾乘;
  • 需要知道要排序的列表最大值;

桶排序

桶排序算是計數(shù)排序的升級版逗栽,桶排序首先把元素分在不同的桶中盖袭,再對每個桶中元素排序。如下圖所示:



其實每個桶表示一個空列表彼宠,示例代碼如下:

def bucket_sort(li, n=4, max_num=40):
    buckets = [[] for _ in range(n)]           # 創(chuàng)建桶
    for var in li:
        i = min(var // (max_num // n), n - 1)  # i 表示元素放在哪個桶
        buckets[i].append(var)                 # 把元素放在桶里
        # 桶內(nèi)排序
        for j in range(len(buckets[i]) - 1, 0, -1):     # 從桶的后面往前面比較元素大小
            if buckets[i][j] < buckets[i][j - 1]:
                buckets[i][j], buckets[i][j - 1] = buckets[i][j - 1], buckets[i][j]
            else:
                break
    sorted_li = []                          
    for buc in buckets:             
        sorted_li.extend(buc)                   # 合并桶
    return sorted_li

li=[35,22,12,19,20,5,10,15]
print(bucket_sort(li))

運行結(jié)果如下:

基數(shù)排序

基數(shù)排序是根據(jù)元素位數(shù)進行排序鳄虱,例如,先按照元素的個位數(shù)來排序凭峡,按照元素的十位數(shù)來排序拙已,再按照百位、千位等等摧冀。如下圖所示:



示例代碼如下:

def radix_sort(li):
    max_num = max(li)  # 獲取列表最大值
    it = 0
    # 根據(jù)最大值來判斷進行元素的個位倍踪、百位、千位索昂、萬位來排序
    while 10 ** it <= max_num:
        buckets=[[] for _ in range(10)]     # 創(chuàng)建空列表
        for var in li:
            digit=(var//10**it)%10
            buckets[digit].append(var)      # 插入空列表中
        li.clear()
        for buc in buckets:
            li.extend(buc)          # 合并
        it += 1
        print(li)
li=[22,54,28,32,14,33,56,12]
radix_sort(li)

運行結(jié)果如下:



好了建车,關(guān)于算法入門——計數(shù)排、桶排序椒惨、基數(shù)排序就學(xué)到這里了缤至,下篇文章學(xué)習(xí)算法入門的其他知識。

公眾號:白巧克力LIN

該公眾號發(fā)布Python康谆、數(shù)據(jù)庫领斥、Linux、Flask沃暗、自動化測試月洛、Git、算法等相關(guān)文章孽锥!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚼黔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惜辑,更是在濱河造成了極大的恐慌隔崎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韵丑,死亡現(xiàn)場離奇詭異爵卒,居然都是意外死亡,警方通過查閱死者的電腦和手機撵彻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門钓株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來实牡,“玉大人,你說我怎么就攤上這事轴合〈次耄” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵受葛,是天一觀的道長题涨。 經(jīng)常有香客問我,道長总滩,這世上最難降的妖魔是什么纲堵? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮闰渔,結(jié)果婚禮上席函,老公的妹妹穿的比我還像新娘。我一直安慰自己冈涧,他們只是感情好茂附,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著督弓,像睡著了一般营曼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愚隧,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天溶推,我揣著相機與錄音,去河邊找鬼奸攻。 笑死,一個胖子當著我的面吹牛虱痕,可吹牛的內(nèi)容都是我干的睹耐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼部翘,長吁一口氣:“原來是場噩夢啊……” “哼硝训!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起新思,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窖梁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夹囚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵刘,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年荸哟,在試婚紗的時候發(fā)現(xiàn)自己被綠了假哎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞬捕。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舵抹,靈堂內(nèi)的尸體忽然破棺而出肪虎,到底是詐尸還是另有隱情,我是刑警寧澤惧蛹,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布扇救,位于F島的核電站,受9級特大地震影響香嗓,放射性物質(zhì)發(fā)生泄漏迅腔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一陶缺、第九天 我趴在偏房一處隱蔽的房頂上張望钾挟。 院中可真熱鬧,春花似錦饱岸、人聲如沸掺出。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汤锨。三九已至,卻和暖如春百框,著一層夾襖步出監(jiān)牢的瞬間闲礼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工铐维, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柬泽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓嫁蛇,卻偏偏與公主長得像锨并,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子睬棚,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容