我正在按照快速排序算法课程的代码行,这些代码行:
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
代码将被递归调用,使用更小的数组子集。较小的子集可以有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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。