为什么我尝试对“快速排序”进行的排序不正确?

问题描述 投票:1回答:1

[我一直在努力产生一种'简单的'快速排序算法,因为许多在线示例似乎比证明算法的原理所需的编写更为复杂。

我已经到了无法理解最终列表为什么不能正确排序的地步。我将感谢您有新鲜的眼睛和朝正确方向完成代码的指针。

这是我当前的代码:

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))

任何帮助将不胜感激。

python python-3.x quicksort
1个回答
0
投票

条件应该是point1 < point2,而不是pointX != pivot。向左和向右拆分应该是point1和point2相遇的地方。

© www.soinside.com 2019 - 2024. All rights reserved.