私はクイックソートアルゴリズムを学んでいますが、何らかの理由でこのPython実装の出力が部分的にソートされており、大きな入力に対しては最大再帰深度に達しています。私は最後の数日間、これに対して頭を叩いていたし、おそらく何か本当に馬鹿だと知っていますが、私はそれを理解することができないので、私はどんな助けにも感謝します。Python QuickSortのみ部分的にソートする
def ChoosePivot(list):
return list[0]
def Partition(A,left,right):
p = ChoosePivot(A)
i = left + 1
for j in range(left + 1,right + 1): #upto right + 1 because of range()
if A[j] < p:
A[j], A[i] = A[i], A[j] #swap
i = i + 1
A[left], A[i - 1] = A[i-1], A[left] #swap
return i - 1
def QuickSort(list,left, right):
if len(list) == 1: return
if left < right:
pivot = Partition(list,left,right)
QuickSort(list,left, pivot - 1)
QuickSort(list,pivot + 1, right)
return list[:pivot] + [list[pivot]] + list[pivot+1:]
sample_array = [39,2,41,95,44,8,7,6,9,10,34,56,75,100]
print "Unsorted list: "
print sample_array
sample_array = QuickSort(sample_array,0,len(sample_array)-1)
print "Sorted list:"
print sample_array
もっと高いレベルでアルゴリズムを考えるべきです。それはC言語のような言語で書く方法です。それを機能的に考える方が良いでしょう。 –