计数按降序排列列表

2024-04-20 13:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

所以基本上我想知道如何反转计数排序。这是我找到的代码:

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之前。我尝试恢复一些其他符号,但通常会导致越界错误。有什么办法解决这个问题吗


Tags: 代码inforlenreturnif排序def
2条回答

反转j迭代的范围,从高数值开始,然后以低数值结束:

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

i -= 1写的是索引0,-1,-2,-3等。也就是说,你在前面写最小的数字(1),然后从后面向后写剩余的数字。您可以从i = -1开始使用它

相关问题 更多 >