python 極簡(jiǎn)的桶排序代碼

created by Dejavu


  • 代碼

這里的桶排的寫(xiě)法是利用創(chuàng)建一個(gè)長(zhǎng)度為輸入數(shù)組array最大值的臨時(shí)數(shù)組book,然后把a(bǔ)rray中的值逐一代入book的索引,對(duì)應(yīng)的book數(shù)組索引下的值就是數(shù)字出現(xiàn)的次數(shù),從而返回book中的非零索引即可

def bucket_sort(array):
    if not array:
        return False
    max_len = max(array)+1
    book = [0 for x in range(0,max_len)]
    for i in array:
        book[i] += 1
    return [i for i in range(0,max_len) for j in range(0,book[i])]
  • 改進(jìn)

缺陷:無(wú)法排負(fù)數(shù),無(wú)法排小數(shù),book所占的空間由輸入數(shù)組的最大值確定

改進(jìn):

  1. 針對(duì)存在負(fù)數(shù)的情況

    # 可對(duì)負(fù)數(shù)排序
    def bucket_sort(array):
        if not array:
            return False
        offset = min(array)
        max_len = max(array) - offset + 1
        book = [0 for x in range(0,max_len)]
        for i in array:
            book[i - offset] += 1
        return [i + offset for i in range(0,max_len) for j in range(0,book[i])]
    
  1. 針對(duì)存在小數(shù)的情況

    # 可對(duì)小數(shù)排序
    def bucket_sort(array):
        if not array:
            return False
        # 保留兩位小數(shù)
        accuracy = 100.
        offset = int(min(array) * accuracy)
        max_len = int(max(array) * accuracy - offset + 1)
        book = [0 for x in range(0,max_len)]
        for i in array:
            book[int(i * accuracy - offset)] += 1
        return [(i + offset) / accuracy for i in range(0,max_len) for j in range(0,book[i])]
    
  1. 利用傳統(tǒng)的逐位進(jìn)行桶排

    這邊想到可以在十行內(nèi)實(shí)現(xiàn)的方法實(shí)在是太不易讀了,如果你有什么清晰的實(shí)現(xiàn)代碼的話歡迎留言告知

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 某次二面時(shí),面試官問(wèn)起Js排序問(wèn)題,吾絞盡腦汁回答了幾種,深感算法有很大的問(wèn)題,所以總計(jì)一下! 排序算法說(shuō)明 (1...
    流浪的先知閱讀 1,255評(píng)論 0 4
  • 一、 單項(xiàng)選擇題(共71題) 對(duì)n個(gè)元素的序列進(jìn)行冒泡排序時(shí),最少的比較次數(shù)是( )。A. n ...
    貝影閱讀 9,437評(píng)論 0 10
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,829評(píng)論 0 15
  • 短詩(shī)大賽 投稿鏈接 在校和畢業(yè)三年內(nèi)大學(xué)生(含大專(zhuān),本科生,研究生,博士生可投稿,一等獎(jiǎng)5000元)
    交大研會(huì)君閱讀 570評(píng)論 0 4
  • *神圣的臨在。也就是愛(ài)的降臨。 *我們自己實(shí)際是我們自己最大的充電器,我們得經(jīng)?;氐轿覀兊倪@個(gè)充電器里面得到心神的...
    喜悅松閱讀 348評(píng)論 0 0

友情鏈接更多精彩內(nèi)容