Fork me on GitHub

算法入门09

排序——快排、归并

1、归并排序和快速排序都用到了分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。分治算法一般都是用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧,这两者并不冲突。

2、归并排序(Merge Sort)
如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。

归并排序不是原地排序算法、是稳定的排序算法;时间复杂度 O(nlogn),空间复杂度 O(n);

3、快速排序算法(Quicksort)
如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点)。遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 pivot 的。

快排是一种原地、不稳定的排序算法。时间复杂度 O(nlogn),空间复杂度 O(1);

-------------本文结束感谢您的阅读-------------

本文标题:算法入门09

文章作者:Yan ChongSheng

发布时间:2018年12月04日

最后更新:2018年12月26日

原始链接:yanchongsheng.github.io/2018/12/04/Algorithm-2018-12-04-算法入门09/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

开启打赏模式