python - 获得反向排序的快速排序(降序)

标签 python algorithm list quicksort

我的代码有问题,希望这里有人能解决。该代码适用于 quickSort 算法,但我希望代码的这个特定部分给我一个反向排序的 quickSort 列表,因此列表按降序排列。这里有人可以帮助我吗?

def quickSort(L, ascending = True):
    print('Quicksort, Parameter L:')
    print(L)
    if len(L) <= 1: return L
    smaller, equal, larger = [],[],[]
    pivot = L[randint(0,len(L)-1)]

    for x in L:
        if x < pivot: smaller.append(x)
        elif x == pivot: equal.append(x)
        else: larger.append(x)

    print('result: ', quickSort(smaller)+equal+quickSort(larger))
    return quickSort(smaller)+equal+quickSort(larger)


l1 = list([3, 2, -1, 9, 17, 4, 1, 0])

l2 = list([3.14159 , 1./127, 2.718 , 1.618 , -23., 3.14159]) 

l1 = mergeSort(l1)

l2 = quickSort(l2,False)

最佳答案

如果您的列表不是升序的,那么输出中较大的元素会排在较小的元素之前。不要忘记将 ascending 值传递给递归调用。

from random import randint


def quickSort(L, ascending=True):
    if len(L) <= 1:
        return L
    smaller, equal, larger = [], [], []
    pivot = L[randint(0, len(L) - 1)]

    for x in L:
        if x < pivot:
            smaller.append(x)
        elif x == pivot:
            equal.append(x)
        else:
            larger.append(x)

    larger = quickSort(larger, ascending=ascending)
    smaller = quickSort(smaller, ascending=ascending)

    if ascending:
        final = smaller + equal + larger
    else:
        final = larger + equal + smaller
    return final


l2 = list([3.14159 , 1./127, 2.718 , 1.618 , -23., 3.14159])
print(quickSort(l2, ascending=False))
# [3.14159, 3.14159, 2.718, 1.618, 0.007874015748031496, -23.0]

值得注意的是,如果不进行就地排序,不形成任何额外的列表,您将失去快速排序的很多好处。您应该尝试编写一个仅交换输入列表中的元素的实现。

关于python - 获得反向排序的快速排序(降序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896944/

相关文章:

python - 单独浏览一个列表

python - 通过python脚本加载fixture.json

python - 更改 session 变量值失败

python - Django manytomany 关系超过 2 个应用程序

algorithm - 在哪些算法或情况下链表是唯一的选择?

algorithm - 使用 Dijkstra 时如何加权其他因素

algorithm - 编写一个算法来返回一个数组,使得 1..n 中的每个数字 k 恰好出现两次并且与其副本相距 k 距离

c# - 获取列表中的最大 KeyValuePair<KeyValuePair>

java - 有没有很好的API来获取有关当前事件的信息?

python - 查找python列表之间的交集/差异