def quicksort(mas):
if mas:
mid = mas[0]
menshe = [i for i in mas[1:] if i < mid]
bolshe = [i for i in mas[1:] if i >= mid]
return quicksort(menshe) + [mid] + quicksort(bolshe)
else:
return mas
n = int(input())
mas = input().split()
print(*quicksort(mas))
例如,它在一些测试中失败了
input:
3
8 21 22
output:
21 22 8
如何改进代码?
你的代码可能很好用。我还没有测试它。 (但现在我觉得它似乎正确)
你的错误是丢弃了你的第一个输入。所以,您应该使用自己的代码,如下所示:
mas = input().split()
print(*quicksort(mas))
你只需要一个输入。
此外,您正在排序字符串,不一定是数字,所以您可能想要这样做:
mas = input().split()
print(*quicksort([int(item) for item in mas]))
您的quicksort实现似乎是正确的,但您忘记将输入转换为整数。你正在排序字符串。
作为旁注:不要忘记枢轴选择策略在快速排序算法中非常重要。你的“第一个元素作为枢轴”方案类似于Lomuto partition scheme,对于有序或几乎有序的序列,它很容易降级为O(n^2)
。