私はPythonでquicksortを実装するために、2つの主要な関数--partitionとquicksortを使用しています。 パーティション関数は、pより大きい2つの配列を返すように設計されています。その後、クイックソートが別々に呼び出されます。 ので、クイックソートは、次のように動作します。クイックソートとPythonでの再帰
def quicksort(array)
pivot = 0 # pivot choice is irrelevant
left,right = partition(array,pivot)
quicksort(left)
quicksoft(right)
return left+right
しかし、私の理解から、それだけで1つのインデックスを返すためにパーティションを設計することが可能でなければなりません - 区切り大きく、小さなアレイを、次のようにクイックソートを再設計:
def quicksort(array)
pivot = 0 # pivot choice is irrelevant
i = partition(array,pivot)
quicksort(array[:i-1])
quicksoft(array[i:])
return array
は、しかし、この実装は、部分的にソートされた配列
original array [5, 4, 2, 1, 6, 7, 3, 8, 9]
sorted array [3, 4, 2, 1, 5, 7, 6, 8, 9]
を返す私はここで何をしないのですか?
はあなたの新しい 'パーティション()'関数が所定の位置に配列を変更する自信があります返します? – sarnold
私は非常によく似たパーティション関数を書いていました。どこでもリストをコピーするのではなく、高低インデックスを使用するパーティション関数http://stackoverflow.com/a/9244923/632088を書きました。可能であれば、 –
一般的なルールとして、関数がその引数をインプレースで変更した場合、 'L.sort()とソート済み(L)'のように 'None'を返すべきです。 – jfs