我正在尝试使用 python 解决快速排序算法。但是,我在编写快速排序函数时遇到了问题。即使我只使用 for 循环 len(list)-2 次,它仍然给我索引错误。 这是我写的代码:
def partition(nums:list, start = 0, end = None):
if end is None:
end = len(nums)-1
pivot = nums[end]
pindex = start
for i in range(end):
if nums[i]<=pivot:
nums[i], nums[pindex] = nums[pindex], nums[i]
pindex+=1
nums[end], nums[pindex] = nums[pindex], nums[end]
return pindex
def quicksort(nums:list, start = 0, end = None):
if end is None:
end = len(nums)-1
if start<end:
pindex = partition(nums,start, end)
quicksort(nums, start, pindex-1)
quicksort(nums, pindex+1, end)
return nums
print(quicksort([4,5,1,3,6]))
我只尝试了配分函数,它是正确的。然而,同时使用这两个函数总是给我带来索引错误。
您的配分函数的循环不正确。它应该只迭代直到
end - 1
,而不是列表的整个长度。