美文网首页
排序:五. 快速排序(将“基准”前,后不符合规则的元素交换)

排序:五. 快速排序(将“基准”前,后不符合规则的元素交换)

作者: DJN_ | 来源:发表于2018-12-14 10:41 被阅读0次

    参考文章

    快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)。
    时间复杂度O(nlog2n),最坏状况下O(n2),但这种状况并不常见。

    事实上,快速排序通常明显比其他O(nlog2n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。


    image.png

    快速排序使用分治法策略来把一个序列分为两个子序列。

    步骤为:

    1. 选取“基准”:从数列中挑出一个元素,称为"基准"(pivot)
    2. 分区(partition)操作:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。
    3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
      递归到最底部时,数列的大小是零或一,也就是已经排序好了。

    这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。(最终排好序时其应该在的位置)

    实现类为 QuickSort

    image.png
    算法描述如下:
    取中间位置元素为“基准”
    取“基准”以左最左元素为“头”
    取“基准”以右最右元素为“尾”
    从两端向中间遍历:
    找到“头”往后第一个不小于“基准”的元素a及其下标i
    找到“尾”往前第一个不大于“基准”的元素b及其下标j
    如果i<j,交换a和b,继续循环;
    如果i==j,此次排序结束,开始下一次递归
    如果i>j,结束循环,此次排序结束,开始下一次递归

    代码已上传 GitHub,可以在 这里 找到

    相关文章

      网友评论

          本文标题:排序:五. 快速排序(将“基准”前,后不符合规则的元素交换)

          本文链接:https://www.haomeiwen.com/subject/napwhqtx.html