2017-11-06 5 views
1

こんにちは私はPythonでクイックソートを実装しています。 基本的に私の関数は完全に再帰的に動作しますが、私には順序付き配列は返されず、元の配列だけが返されます。配列を正しく並べ替えることができますが、私には返しません。

コードがあります。 Quick Sortの2つのバージョンがあります。 quickSort_2が正しく動作し、リストを注文してください。代わりにquickSort_1quicksort_1とまったく同じですが、私に元の配列を返します。

なぜこのようなことが起こるのですか?

import random 
import list 

def partition(A,p): 
    pivot=A[p] 
    sup=0 
    inf=len(A)-1 
    while sup!=inf: 
     while A[sup]<pivot: 
      sup+=1 
     while A[inf]>pivot: 
      inf-=1 
     list.swap(inf,sup,A) #swap 
     print A 
    return sup 

def quickSort_1(A): 
    if len(A)<=1: 
     return A 
    r=random.choice(range(0,len(A)-1)) 
    print A 
    m=partition(A,r) 
    return quickSort_1(A[:m+1])+quickSort_2(A[m+1:]) 

def quickSort_2(A): 
    if len(A)<=1: 
     return A 
    r=random.choice(range(0,len(A)-1)) 
    print A 
    m=partition(A,r) 
    quickSort_1(A[:m+1]) 
    quickSort_2(A[m+1:]) 
    return A 
+0

最後の段落を確認できますか?私はあなたが間違った方法でいくつかの方法を入れたと思う:P。どちらが良い状態で走っていて、どちらが悪い状態で復帰していますか? とにかく問題のある第2版だと思います。その理由は、配列の各部分についてquickSortを計算していますが、元の配列を返すためです。A.両方の呼び出しの結果を追加して返します。 –

答えて

0

2番目の機能で元の配列Aが返されます。

ソートされた配列を元の配列として保存し、returnこの値を保存する必要があります。

A_new = quickSort_1(A[:m+1])+quickSort_2(A[m+1:]) 
return A_new 

あなたが機能quickSort_1quickSort_2の範囲内の配列Aを変更しているので、元の配列Aのない変更はありません。このような何か。

+0

ありがとう、私はクイックソートのアプローチに基づいて私の友人によって作成された別のバージョンのクイックソートと混同されました。違いは、2つのサブリストでクイックソートを呼び出した後、索引にif条件を使用し、最後に(クイックソートでリスト全体を並べ替えると)、Aでリターンを使用するということでした。 – sixpain

+0

問題ありません。それが問題を解決した場合は、問題を閉じるために回答を受け入れたものとしてマークすることを検討してください。ありがとう:) – Dorian

関連する問題