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

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

作者: 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,可以在 这里 找到

相关文章

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

    参考文章 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)...

  • 一看就懂的快速排序

    概念 快速排序属于交换排序,主要步骤是使用基准元素进行比较,把小于基准元素的移动到一边,大于基准元素的移动到另一边...

  • 排序算法之快速排序

    排序算法之快速排序算法 快速排序思想:选一个基准数将所有的元素都比较一遍,将大于基准数的放到基准数的右边,小于它的...

  • 排序可视化

    选择排序 插入排序 归并排序 快速排序 最基础的快排 每次确定数组的第一个元素作为基准值,然后通过比较和交换,基准...

  • 经典排序算法(下)(快速排序、归并排序)

    1.快速排序 快速排序每趟选择一个基准元素,用基准元素将序列划分成两部分,所有比基准值小的元素摆放在基准前面,所有...

  • 快速排序、归并排序

    1.快速排序 快速排序每趟选择一个基准元素,用基准元素将序列划分成两部分,所有比基准值小的元素摆放在基准前面,所有...

  • python实现冒泡排序 -- 详细分析思路

    1. 冒泡排序的思想 重复遍历要排序的数列,每次比较两个位置的元素,如果不符合排序规则,则交换两个位置的元素,一直...

  • 读书打卡<<算法图解-第四章>>>

    快速排序 递归计算阶乘 快速排序 快速排序的步骤 1.找出基准条件,基准值将直接影响排序的速度 2.O(log n...

  • 【PHP】简单排序算法

    冒泡排序 遍历列表,比较两个相邻元素的大小,不符合排序就交换相邻元素的位置,直到遍历结束或没有可交换的元素,则排序...

  • C实现快速排序

    快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全...

网友评论

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

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