分区数组不正确

时间:2017-03-11 22:34:40

标签: sorting quicksort partitioning

我正在尝试对数组进行分区,以使数组前半部分中的每个元素都小于数组后半部分中的每个元素。这与快速排序中使用的分区算法相同。出于某种原因,我可以让数组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)

1 个答案:

答案 0 :(得分:0)

问题是代码需要选择一个代表数组中位数的数据透视表。这可以使用快速选择或类似的东西来完成。请注意,快速选择的最坏情况时间复杂度为O(n ^ 2)。维基文章:

http://en.wikipedia.org/wiki/Quickselect