Quicksort Python排序麻烦

时间:2017-12-27 13:54:23

标签: python algorithm sorting quicksort

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

如何改进代码?

2 个答案:

答案 0 :(得分:3)

您的quicksort实现似乎是正确的,但您忘记将输入转换为整数。你正在排序字符串。

作为旁注:不要忘记枢轴选择策略在快速排序算法中非常重要。你的第一个元素作为一个支点&#34; scheme类似于Lomuto partition scheme,对于有序或几乎有序的序列,它很容易降级为O(n^2)

答案 1 :(得分:1)

您的代码可能会很好用。我还没有测试过。 (但现在我认为这是正确的)

您的错误在于您丢弃了第一个输入。所以,你应该使用你自己的代码:

mas = input().split()
print(*quicksort(mas))

您只需输入一个。

此外,您正在排序字符串,不一定是数字,所以可能想要这样做:

mas = input().split()
print(*quicksort([int(item) for item in mas]))