arr = [7, 3, 5, 6, 7, 1, 8, 0, 4, 9, 6, 2]
def partitioning(arr, l, d):
pivot = 5
while l <= d:
while arr[l] < pivot:
l += 1
while arr[d] > pivot:
d -= 1
arr[l], arr[d] = arr[d], arr[l]
partitioning(arr, 0, len(arr) - 1)
print(arr)
我不明白为什么当l&lt; = d时,当l和d变得相同时,它们会停止移动并保持交换到无穷大?
答案 0 :(得分:1)
l == d
和arr[l] == arr[d] == pivot
时发生无限循环。在这种情况下,内部循环永远不会做任何事情,交换也不会做任何事情,因为两个索引是相同的(所以你自己交换枢轴)。
您希望在这种情况下退出顶部循环,因为数组已完全分区。您应该将外部循环上的<=
更改为<
,它应该可以正常工作。
您需要更改轴向选择逻辑(因为如果枢轴不在列表中,您的内部循环可能会在结束时运行l
或d
列表),但我认为选择常量5
只是一个初步的事情。