根据许多网站给出的伪代码,我编写了这个Hoare
分区算法,它采用一个数组,子数组的开始和结束索引根据给定的枢轴进行分区。它工作正常,但有人可以解释逻辑,它是如何做的吗?这里的代码:
def hoare(arr,start,end):
pivot = 4
i,j = start,end
while i < j:
while i < j and arr[i] <= pivot:
i += 1
while j >= i and arr[j] > pivot:
j -= 1
if i < j:
arr[i],arr[j] = arr[j],arr[i]
return j
分区还有另一种变体,即Lomuto
算法。它做了类似的事情,虽然因为我一开始不理解Hoare
算法,所以我看不出区别。任何人都可以解释算法中发生了什么,以及在哪种情况下哪个提供更好的性能?