得到一个反向排序的quickSort(降序)

时间:2018-06-17 13:04:13

标签: 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)

2 个答案:

答案 0 :(得分:1)

如果列表没有提升,则较大的元素会出现在输出中较小的元素之前。不要忘记将SELECT * FROM posts P INNER JOIN ( SELECT post_id, CONCAT ("(", Group_concat(t.name SEPARATOR ' ,'), ")") AS tgs FROM pivote p INNER JOIN tag t ON (t.id = p.tag_id) GROUP BY post_id ) AA ON P.id = post_id WHERE tgs LIKE "(mysql,php) 值传递给递归调用。

ascending

值得注意的是,如果不进行就地排序,而不会形成任何额外的列表,则会失去quicksort的许多好处。您应该尝试编写仅在输入列表中交换元素的实现。

答案 1 :(得分:0)

在给定ascending=False时,您可以撤消所有比较运算符。

虽然,在给定此参数时,在函数上使用包装器反转列表会更简单。

import random

def _quickSort(lst):
    print('Quicksort, Parameter L:', lst)
    if len(lst) <= 1:
        return lst
    smaller, equal, larger = [], [], []
    pivot = random.choice(lst)

    for x in lst:
        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)

def quickSort(lst, ascending=True):
    if ascending:
        return _quickSort(lst)
    else:
        return _quickSort(lst)[::-1]

输出:

lst = [3, 2, -1, 9, 17, 4, 1, 0]

lst = quickSort(lst, ascending=False)

print(lst) # [17, 9, 4, 3, 2, 1, 0, -1]

图片的标题说明

在Python中,我们通常会尝试仅为类使用大写名称,因此请避免命名列表L,而是使用llst

此外,要选择随机数据透视表,使用random.choice的方式比random.randint更简洁。