我正在尝试对数组进行分区,以使数组前半部分中的每个元素都小于数组后半部分中的每个元素。这与快速排序中使用的分区算法相同。出于某种原因,我可以让数组A = [2, 8, 7, 1, 3, 5, 6, 4]
起作用,但A = [7, 3, 6, 1, 9, 5, 4, 8]
将不起作用。
def partition(A):
x = A[len(A)-1]
i = -1
for j in range (0, len(A)-2):
if A[j]<=x:
i = i + 1
# exchange A[j] and A[i]
jValue = A[j]
A[j] = A[i]
A[i] = jValue
# exchange A[len(A)-1] and A[i+1]
rValue = A[len(A)-1]
A[len(A)-1] = A[i+1]
A[i+1] = rValue
print(A)
答案 0 :(得分:0)
问题是代码需要选择一个代表数组中位数的数据透视表。这可以使用快速选择或类似的东西来完成。请注意,快速选择的最坏情况时间复杂度为O(n ^ 2)。维基文章: