[英]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.