python 極簡的桶排序代碼

created by Dejavu


  • 代碼

這里的桶排的寫法是利用創(chuàng)建一個長度為輸入數(shù)組array最大值的臨時數(shù)組book,然后把array中的值逐一代入book的索引,對應(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])]
  • 改進

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

改進:

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

    # 可對負(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. 針對存在小數(shù)的情況

    # 可對小數(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)的逐位進行桶排

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

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

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

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

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