Я написал быстрый код сортировки. Он отлично работает, за исключением того, что один элемент остается несортированным. Я пробовал отлаживать, но напрасно. Не могли бы вы помочь мне найти потенциальную ошибку.Ошибка при выборе элемента средней точки в python quick sort
Вот код.
def qsort(l,start,end):
if start >= end :
return
i,j = start, end
pivot = (start + (end - start)/2)
while i<=j:
while(l[i] < l[pivot]):
i+=1
while(l[j] > l[pivot]):
j-=1
if(i<=j):
l[i],l[j] = l[j],l[i]
i+=1
j-=1
qsort(l,start,j)
qsort(l,i,end)
return l
a = [67,89,45,23,15,19,1,14,100]
print qsort(a,0,len(a)-1)
Выход указанного выше кода [1, 14, 15, 23, 19, 45, 67, 89, 100]. По некоторым причинам позиции 23 и 19 не меняются местами.
Однако, если я выбираю случайный стержень с оператором pivot = random.randint (fst, lst), я получаю полностью отсортированный список. Может ли кто-нибудь объяснить причину этого?
Спасибо. В моем коде, если я назначу pivot = start, как вы это делали, он отлично работает. Но я все еще хочу понять, что может быть неправильно при выборе элемента опоры в середине списка. Если бы вы могли объяснить мне, это было бы здорово. – DineshKumar