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