我的代码存在问题,希望有人可以解决这个问题。该代码与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)
答案 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
,而是使用l
或lst
。
此外,要选择随机数据透视表,使用random.choice
的方式比random.randint
更简洁。