簡體   English   中英

計數按降序對列表進行排序

[英]Counting sort a list in descending order

所以基本上我想弄清楚如何反轉計數排序。 這是我找到的代碼:

def countingSort(myList):
    maxValue = 0
    for i in range(len(myList)):
        if myList[i] > maxValue:
            maxValue = myList[i]

    buckets = [0] * (maxValue + 1)

    for i in myList:
        buckets[i] += 1

    i = 0
    for j in range(maxValue + 1):
         for a in range(buckets[j]):
             myList[i] = j
             i += 1

    return myList

if __name__ == '__main__':
    sortedList = countingSort([1,23,4,5,6,7,8])
    print(sortedList)

所以我決定將第 16 行改為:

i -= 1

結果非常接近,但我明白了:

[1, 23, 8, 7, 6, 5, 4]

我的問題是 1 由於某種原因在 23 之前。 我嘗試恢復其他一些標志,但通常會導致越界錯誤。 有什么方法可以解決它?

反轉j迭代的范圍,以便從大數字開始,然后以小數字結束:

for j in range(maxValue, -1, -1):

使用i -= 1您在索引 0、-1、-2、-3 等處寫入。也就是說,您在前面寫入最小的數字(1),然后從后面向后寫入剩余的數字。 您可以從i = -1開始使其工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM