这使用什么分区算法? (快速排序)

时间:2016-03-22 19:30:21

标签: algorithm python-2.7

我正在"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

(然后重复)

2 个答案:

答案 0 :(得分:3)

根据动画,他们每次选择第一个元素作为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)

答案 1 :(得分:1)

显然问题严重受损:

https://getsatisfaction.com/codeeval/topics/as-quick-as-a-flash (codeeval&#39; s反馈系统)

很抱歉没有尽快找到,但很明显,谷歌没有正确索引获得满意的发布系统;因为我之前尝试在他们的网站上找到帮助或通常通过谷歌没有显示这个结果。 &GT;&LT;

我将python的答案标记为正确,因为它有用且非常接近我的要求。

无论如何,解决方案似乎是使用Hoare分区方案,尽管不可能从问题中的给定信息中推断出来:

https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme