gpt4 book ai didi

sorting - 快速排序是一种分而治之的方法吗?

转载 作者:行者123 更新时间:2023-12-02 17:17:38 29 4
gpt4 key购买 nike

  1. 我认为合并排序是分而治之,因为,

    划分 - 数组实际上被划分为子数组没有任何处理(比较/交换),并且问题大小减半/四分之一/....

    征服 - merge()通过处理(比较/交换)

    来处理这些子数组

    代码给人的印象是分而治之,

    if(hi <= lo) return;
    int mid = lo + (hi-lo)/2; //No (compare/swap) on elements before divide
    sort(a, aux, lo, mid); // Problem is halved(Divide)
    sort(a, aux, mid+1, hi);
    merge(a, aux, lo, mid); // (Compare/swap) happens here during Merge - Conquer

合并排序跟踪表明,该问题被细化然后处理,

enter image description here

  • 但是在快速排序中,

    首先,使用分区元素(枢轴)对完整数组进行处理(比较/交换)并固定枢轴的最终位置,然后问题大小减半/四分/....用于重新分区,

    代码没有给人一种分而治之的印象,

    if(hi <= lo) return;
    int j = partition(a, lo, hi); // Do you call this divide phase?
    sort(a, lo, j-1); // This looks like divide phase, because problem is halved
    sort(a, j+1, hi);
  • 快速排序跟踪,显示处理是在完整数组上开始的,然后达到粒度级别,

    enter image description here

    问题:

    1. 我对划分阶段的理解是,将问题规模缩小(一半)。在快速排序中,您是否考虑使用枢轴处理(比较/交换)数组和分区,作为划分阶段?

    2. 我对征服阶段的理解是,聚集/合并回来。快速排序中,征服阶段是什么意思?

    <小时/>
                Note: Am a beginner, in sorting algorithms

    最佳答案

    分而治之算法有 3 个阶段:

    1. 除法,
    2. 征服,
    3. 合并,

    对于合并排序( http://www.cs.umd.edu/~meesh/351/mount/lectures/lect6-divide-conquer-mergesort.pdf ):

    1. 划分:将数组拆分为 2 个子数组,
    2. 征服:递归地对结果子数组进行合并排序,
    3. 合并:将两个已排序的子数组合并为一个已排序的列表。

    对于快速排序( https://www.cs.rochester.edu/~gildea/csc282/slides/C07-quicksort.pdf ):

    1. 划分:首先重新排列,然后将数组分成 2 个子数组,
    2. 征服:对结果子数组进行递归快速排序,
    3. 组合:无。

    注意:感谢罗切斯特大学和马里兰大学计算机科学系。

    关于sorting - 快速排序是一种分而治之的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41356376/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com