2016-06-16 10 views
0

私は最初のクイックソートアルゴリズムを何時間も書こうとしていますが、それでも問題は解決しません。目標は、配列をソートするためのクイックソートコードを書くことです。再帰関数quick_sortとパーティション関数の2つの関数を使いたいと思います。最初のパーティションの後にクイックソートが機能しない

除算と征服によって生成された各サブアレイでパーティション関数が正しく動作しているように見えますが、返された合計配列は最初のパーティション(最初のパーティションは効果があり、 、...、効果がないと思われた)。

私はここに何かを逃したに違いない、何かヒント?あなたはこれが再びのみ最初の反復を行うwilll quicksort(a)を呼び出しているので、あなたはすべての最初の反復として低域と高を設定紀元前

def partition(a, first, last):  
    x = a[0] 
    j = 0 

    for i in range((first+1), (last+1)): 

     if x >= a[i]: 
      j = j + 1 
      a[i], a[j] = a[j], a[i]  
    a[0], a[j] = a[j], a[0] 

    return j 

def quicksort(a): 
    quick_sort(a, 0, len(a) - 1) 

def quick_sort(a, first, last): 

    if first < last:  
     j = partition(a, first, last) 
     # devide a into two parts and do quicksort respectively 
     quicksort(a[:j]) 
     quicksort(a[j+1:]) 

    return a 

a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1] 
quicksort(a) 
+1

a [:j]は異なる配列です。コピー。 quicksort(a、first、j)、quicksort(a、j + 1、last)を使用してください。 – UmNyobe

+0

これは私が逃したところです!ありがとうたくさんのUmNyobe – enaJ

答えて

2

、この

quicksort(a[:j]) 
quicksort(a[j+1:]) 

quick_sort(a,first,j-1) 
quick_sort(a,j+1,last) 

についてを交換してください時刻を保存するために、jを使用して再帰的なものを呼び出す必要があります

関連する問題