[英]Explanation about quicksort algorithm in 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]))
如果枢轴设置在array[0]
,我会成功运行代码,但是当我更改为其他数字时失败,例如 2,3。 错误消息是list index out of range
。
现在我很困惑,如果列表中有 5 个实例,它怎么会超出范围? 如果我将枢轴更改为其他数组位置而不是 [0],为什么代码不起作用? 我认为可以将枢轴设置为任何其他元素位置以加快过程? 谢谢!
代码将使用数组的较小子集递归调用。 较小的子集可以有 2 个元素,在这种情况下,访问array[2]
将导致index out of range
。
例如,在上面的测试中,如果您使用array[2]
作为主元,则代码中枢轴为array[2]=7
并递归调用quicksort([7,3])
和quicksort([15,9])
。 如果您使用array[2]
作为这两个子array[2]
枢轴,它肯定会超出范围。 (请参阅下面的代码和输出)。
除了list index out of range
错误。 我想就您的实施提出 2 条意见:
array[0]
以外的枢轴,请确保相应地调整 set array[1:]
(它应该是array[:p] + array[p+1:]
)less
和greater
那种失败的这一优势。代码示例:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.