Может кто-нибудь сказать, в чем ошибка в моем алгоритме быстрой сортировки?
Я использую две точки 'left' и 'right' для сравнения с осью, и меняю nums [left] и nums [right], если nums [left]> nums [right]. когда левый индекс больше правого, разбейте и поменяйте местами числа [left] и nums [piovt], верните индекс left.
nums = [3,2,3,1,2,4,5,5,6]
n = len(nums)
def partition(nums,left,right,pivot):
while left<right:
if left<right and nums[left]<=nums[pivot]:
left += 1
if left<right and nums[right]>=nums[pivot]:
right -= 1
elif nums[left]>nums[right]:
nums[left],nums[right] = nums[right],nums[left]
left += 1
right -= 1
nums[left],nums[pivot] = nums[pivot],nums[left]
return left
def quicksort(nums,low,high,pivot):
if low<high:
pos = partition(nums,low,high,pivot)
quicksort(nums,low,pos-2,pos-1)
quicksort(nums,pos+1,high-1,high)
return nums
quicksort(nums,0,n-2,n-1)
print(nums)
и: [1, 2, 2, 3, 3, 5, 5, 6, 4]