我正在研究"Quick as a Flash" over at CodeEval并试图找出他们在分区步骤中使用的算法The only hint is the animation they include.
它看起来是递归的,但我不知道逻辑是什么。它似乎不像维基百科中的标准“lomuto”分区方案。
任何提示都是值得赞赏的,没有破坏者关于如何完成挑战,我想自己完成它;但是在帖子中没有足够的信息来继续。
编辑:
下面是它在动画中显示的列表状态之间的转换:
5,2,6,1,3,4
4,2,6,1,3,5
4,2,5,1,3,6
4,2,3,1,5,6
1,2,3,4,5,6
(然后重复)

最佳答案

基于动画,他们每次都选择第一个元素作为pivot,然后根据pivot的值交换值。轴左侧的值将更少,而右侧的值应更大。我没有透露答案,但下面的代码只是你的一个开始!
下面的代码片段用于quicksort算法

def partition(A, start, end):
    pivot = A[end]
    pindex = start
    for i in range(start, end):
        if A[i] <= pivot:
            A[i], A[pindex] = A[pindex], A[i]
            pindex += 1

    A[pindex], A[end] = A[end], A[pindex]
    return pindex

def quick_sort(A, start, end):

    if start < end:
        pindex = partition(A, start, end)
        quick_sort(A, start, pindex - 1)
        quick_sort(A, pindex + 1, end)

    return A

print quick_sort([10, 1, 2, 1, 1, 1], 0, 5)

09-27 09:10