[我一直在努力产生一种'简单的'快速排序算法,因为许多在线示例似乎比证明算法的原理所需的编写更为复杂。
我已经到了无法理解最终列表为什么不能正确排序的地步。我将感谢您有新鲜的眼睛和朝正确方向完成代码的指针。
这是我当前的代码:
def qsort(dataset):
if len(dataset) < 2:
return (dataset)
else:
point1 = 0
point2 = len(dataset) - 1
pivot = (len(dataset) - 1 ) // 2
while point1 != pivot and point2 != pivot:
while dataset[point1] <= dataset[pivot] and point1 != pivot:
point1 = point1 + 1
while dataset[point2] >= dataset[pivot] and point2 != pivot:
point2 = point2 - 1
x = dataset[point1]
dataset[point1] = dataset[point2]
dataset[point2] = x
left = qsort(dataset[0:pivot])
right = qsort(dataset[(pivot+1):len(dataset)])
return left + [dataset[pivot]] + right
dataset = [45, 29, 56, 23, 55, 27, 43, 46]
print(qsort(dataset))
任何帮助将不胜感激。
条件应该是point1 < point2
,而不是pointX != pivot
。向左和向右拆分应该是point1和point2相遇的地方。