Python 中的快速排序算法

问题描述 投票:0回答:1

我正在尝试使用 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])) 

我只尝试了配分函数,它是正确的。然而,同时使用这两个函数总是给我带来索引错误。

python data-structures quicksort partition divide-and-conquer
1个回答
0
投票

您的配分函数的循环不正确。它应该只迭代直到

end - 1
,而不是列表的整个长度。

© www.soinside.com 2019 - 2024. All rights reserved.