クイックソートを実装する際に、ピボット値を選択することがわかっています。パーティションフェーズでは、ピボット値を右端と交換します。 は、ここに私のコードです:だから問題は、私が代わりにmylistというのピボットを書く場合は、[最初]プログラムは、私はrightmarkをマイリスト[最初]ピボットの代わりに交換しながら値を書き込む場合は、一方に動作していないですPythonでのクイックソートの実装とピボット値の交換
def quicksort(mylist):
quicksorthelper(mylist,0,len(mylist)-1)
def quicksorthelper(mylist,first,last):
if first< last:
splitpoint=partition(mylist,first,last)
quicksorthelper(mylist,first,splitpoint-1)
quicksorthelper(mylist,splitpoint+1,last)
def partition(mylist,first,last):
pivot= mylist[first]
leftmark= first +1
rightmark= last
done = False
counter = 0
while not done:
while leftmark <= rightmark and mylist[leftmark]< pivot:
leftmark = leftmark +1
while leftmark <= rightmark and mylist[rightmark]>pivot:
rightmark= rightmark -1
if leftmark>rightmark:
done = True
else:
temp = mylist[leftmark]
mylist[leftmark]=mylist[rightmark]
mylist[rightmark]=temp
counter +=1
temp= pivot #pivot = mylist[first]
pivot = mylist[rightmark]
mylist[rightmark]=temp
return rightmark
mylist= [54,26,93,17,77,31,44,55,20]
quicksort(mylist)
print(mylist)
それただうまく動作します。クイックソート: mylist = [54, 26, 93, 17, 77, 31, 44, 55, 20] sortlist=quicksort(mylist) print(sortlist)
その後、出力はいずれも、あなたの最後の質問についてはその
うん、私はそれを考え出しました。また、彼らはより多くの問題にあります。ピボット値交換。ここで問題が何であるか知っています –
私が投稿したSOの質問と回答は価値交換に関連しています。あなたの質問に加えて働いていない変更部分を追加できますか?私は実際にポイントを取得していません: – dahrens
私のコードのコメントを参照してください#ピボット= mylist [最初の]そのような特定の3行で私は[最初に] mylistの代わりにピボットを書く場合プログラムが動作していません。パーティション関数 –