开发者社区> 问答> 正文

说明快速排序算法在Python

我正在按照快速排序算法课程的代码行,这些代码行:

def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0] #Recursive case
        less = [i for i in array[1:] if i <= pivot] #Sub-array of all elements < pivot
        greater = [i for i in array[1:] if i > pivot] #sub array of all elements > pivot
        return quicksort(less) + [pivot] + quicksort(greater)

print(quicksort([1,15,7,3,9]))

如果在数组[0]上设置了主元,我就成功地运行了代码,但是当我更改为其他数字时,比如2,3,就失败了。错误消息是列表索引超出范围。 现在我很困惑,如果列表中有5个实例,它怎么会超出范围呢? 为什么代码不能工作,如果我改变主元到其他数组位置,而不是[0]?我认为枢轴可以设置为任何其他元素的位置,以加快进程?谢谢! 问题来源StackOverflow 地址:/questions/59385470/explanation-about-quicksort-algorithm-in-python

展开
收起
kun坤 2019-12-25 22:18:21 466 0
1 条回答
写回答
取消 提交回答
  • 代码将被递归调用,使用更小的数组子集。较小的子集可以有2个元素,在这种情况下,访问数组[2]将导致索引超出范围。 例如,在上面的测试中,如果使用数组[2]作为主元,则代码的主元by at数组[2]=7并递归调用快速排序([7,3])和快速排序([15,9])。如果你使用数组[2]作为这两个子数组的主元,它肯定会超出范围。(参见下面的代码和输出)。 除了列表索引超出范围错误。我想对你们的实施提出两点意见: 代码示例:

    def quicksort(array):
        print(array)
        if len(array) < 2:
            return array
        else:
            pivot = array[2] #Recursive case
            less = [i for i in array[1:] if i <= pivot] #Sub-array of all elements < pivot
            greater = [i for i in array[1:] if i > pivot] #sub array of all elements > pivot
            return quicksort(less) + [pivot] + quicksort(greater)
    
    print(quicksort([1,15,7,3,9]))
    

    输出:

    [1, 15, 7, 3, 9]
    [7, 3]
    IndexError: list index out of range
    
    2019-12-25 22:19:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载