こんにちは私はPythonでクイックソートを実装しています。 基本的に私の関数は完全に再帰的に動作しますが、私には順序付き配列は返されず、元の配列だけが返されます。配列を正しく並べ替えることができますが、私には返しません。
コードがあります。 Quick Sortの2つのバージョンがあります。 quickSort_2
が正しく動作し、リストを注文してください。代わりにquickSort_1
はquicksort_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
最後の段落を確認できますか?私はあなたが間違った方法でいくつかの方法を入れたと思う:P。どちらが良い状態で走っていて、どちらが悪い状態で復帰していますか? とにかく問題のある第2版だと思います。その理由は、配列の各部分についてquickSortを計算していますが、元の配列を返すためです。A.両方の呼び出しの結果を追加して返します。 –