簡體   English   中英

Quicksort Python排序麻煩

[英]Quicksort Python sorting trouble

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

如何改進代碼?

您的quicksort實現似乎是正確的,但您忘記將輸入轉換為整數。 你正在排序字符串。

作為旁注:不要忘記樞軸選擇策略在快速排序算法中非常重要。 您的“第一個元素作為樞軸”方案類似於Lomuto分區方案 ,對於有序或幾乎有序的序列,它很容易降級為O(n^2)

你的代碼可能很好用。 我還沒有測試它。 (但現在我覺得它似乎正確)

你的錯誤是丟棄了你的第一個輸入。 所以,您應該使用自己的代碼,如下所示:

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

你只需要一個輸入。

此外,您正在排序字符串,不一定是數字,所以您可能想要這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM