【问题标题】:QuickSort exercise快速排序练习
【发布时间】:2018-05-13 17:57:34
【问题描述】:

我需要对此进行快速排序:90 8 7 56 123 235 9 1 653 ,作为支点 90。我见过很多人这样做,我觉得每个人都以不同的方式这样做.如果它位于最后一个位置,我知道该怎么做,如下:

http://www.geeksforgeeks.org/quick-sort/

但如果是在开头会怎么样?如果它在中间呢?

注意:没有代码,只有编号。

谢谢!

注意:这是我的,但我认为这是错误的,是吗?

653 8 7 56 123 235 9 1 90(与最后一个交换)

653 8 7 56 123 235 9 1 90(arr[J]

8 653 7 56 123 235 9 1 90(交换)

8 7 653 56 123 235 9 1 90

8 7 56 653 123 235 9 1 90

8 7 56 9 123 235 653 1 90

8 7 56 9 1 235 653 123 90

8 7 56 9 1 90 653 123 235

8 7 56 9 1

【问题讨论】:

    标签: data-structures computer-science quicksort


    【解决方案1】:

    初始数据: 90 8 7 56 123 235 91 653

    我们选择枢轴点在 90,左侧标记为 9,右侧标记为 653。

    90 8 7 56 123 235 91 653 P L R

    我们增加左侧标记的索引,直到达到 >90。左侧标记设置为 123。 90 8 7 56 123 235 91 653 P L R

    我们减少正确标记的索引,直到我们达到

    90 8 7 56 123 235 91 653 P R L

    右标记和左标记已经交叉,因此我们找到了一个分割点。我们用 56 交换 90。 56 8 7 90 123 235 91 653

    我们现在将我们的枢轴90 放在正确的位置,并递归地将快速排序应用于每个分区,其中一个分区的停止情况是大小为 1。

    56 8 7 90 123 235 91 653 P L R F P L R

    ('F'表示值固定在那个索引位置)

    这是关于快速排序的一个很好的资源:@​​987654321@

    【讨论】:

    • 我在 YouTube 上看到一个视频是这样做的,我认为这很容易,但是在 geeksforgeeks 上面的链接上,他们的做法不同。他们只检查一侧,而不是两侧。哪一个是正确的?
    • 是的,GeeksforGeeks partition() 的工作方式与 InteractivePython 算法不同。我不确定哪个被认为是正确的,或者是否有一个正确的 QuickSort 版本。重要的部分是它们共享相同的基本逻辑 - 递归(或迭代)识别枢轴并将它们放置在索引位置,以便“左侧”的所有元素都小于枢轴并且“右侧”的所有值都大于比枢轴。
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2020-08-14
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多