2017-03-16 45 views
-1

我發現這個函數是用python寫在互聯網上的,我很困惑,如果它是一個快速排序或不是因爲它被寫入一行而且它工作的很好很快,我認爲它與O(N * log n)的,即使在最壞情況下的複雜工作,所以這是代碼:我們可以稱這個函數爲快速排序嗎

def qsort(L): 
    return (qsort([x for x in L[1:] if x < L[0]]) +\ 
      L[0:1] + \ 
      qsort([x for x in L[1:] if x >= L[0]])) if L else [] 
+1

看起來像一個Quicksort。 – Carcigenicate

+1

將這一條襯裏分解成多行,以便理解它。一條襯裏只是爲了它的緣故,如果它妨礙可讀性,通常是一個糟糕的主意...... – Julien

+0

是的,這是一個快速排序。 (它使用不太理想的空間,但它仍然計數。) – Ryan

回答

0

是的,它是快速排序,因爲它的完美匹配算法定義:拿起從任意一個元素列表中,將低於此元素的值移動到列表的開頭(選定元素之前)並遞歸執行快速排序:

qsort([x for x in L[1:] if x < L[0]]) 
然後

更大或相等的值的列表(選擇後元件)的端部,並執行快速排序遞歸

qsort([x for x in L[1:] if x >= L[0]]) 

如果列表爲空(遞歸終止)當然結果是空列表。

+0

我認爲,但是當我測試她的速度我發現它更好然後megeSort – Adelov

+0

據我記得,雖然兼併和快速排序具有複雜的複雜性nlogn快速排序表現更好,當涉及到典型的隨機分佈 –

相關問題