私の考え: 私はPythonでクイックソートを実装しようとしています。 最初の要素をピボットとして設定します。 左のマークの要素がピボットより大きい場合、ピボットよりも小さい要素を見つけてスワップするために右のマークを移動し始めます。 右のマークが左のマークよりも小さい場合は、右のマークの要素でピボットを入れ替えます。 リストをピボットで区切ります。そしてステップを繰り返してください。クイックソートの再帰エラー
質問: 私の想像通り、私のコードはリストを2つのリストに分けることができます。それが何らかの形で要素を何度かコピーして間違ってしまったときに戻します。私は再帰に精通しておらず、問題を見つけることができません。
def quick_sort(lst):
front = []
rear = []
temp = 0
pivot = lst[0]
i = 1 #leftmark
j = len(lst)-1 #rightmark
if len(lst) == 1:
return lst
while i<=j:
if lst[i]<pivot:
i+=1
else:
if lst[j]>pivot:
j-=1
elif lst[j] == pivot:
break
else:
temp = lst[i]
lst[i] = lst[j]
lst[j] = temp
'''if j<i (rightmark < leftmark) swap pivot with position j'''
temp = pivot
pivot = lst[j]
lst[j] = temp
lst[0] = pivot
front = lst[0:j+1]
rear = lst[i:len(lst)+1]
return quick_sort(front) + [pivot] + quick_sort(rear)
例を挙げてください。 – Julien
'front = lst [1:j + 1]'を使いたくないですか? – Julien
iとjの値は再帰的なリストに応じて変更する必要があります。このiとjの値はそれぞれ常に1とlen(lst-1)です – DineshKumar