我的代码有问题,希望这里有人能解决。该代码适用于 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/