欢迎光临散文网 会员登陆 & 注册

《漫画算法2: 小灰的算法进阶》第一章 排序算法进阶

2023-03-23 22:59 作者:方程星  | 我要投稿

什么是选择排序

选择排序:每一轮选出最小元素直接交换到左侧

选择排序

选择排序时间复杂度:O(n^2)

选择排序空间复杂度:O(1)

选择排序具有不稳定性

什么是插入排序

插入排序:维护一个有序区,把元素一个个插入有序区的适当位置,直到所有元素都有序为止。

给定无序数组

把数组的首元素5作为有序区,此时有序区只有5这一个元素
让元素8和有序区的元素依次比较。8>5,所以元素8和元素5无须交换。此时有序区的元素增加到两个

6依次与8、5比较,6<8,6与8交换,6>5,6与5无需交换,此时有序区又2,6,8三个元素
插入排序一共会进行(数组长度-1)轮

插入排序的优化


要进行第3轮操作
暂存元素3

3与前一个元素8进行比较,3<8,8复制到它的下一个位置

3与6进行比较,3<6,6复制到它的下一个位


3与5进行比较,3<5,5复制到它的下一个位

把暂存的3存放到数组首位   

插入排序最坏的时间复杂度O(n^2)

插入排序的空间复杂度O(1)

什么是希尔排序


希尔排序

希尔排序:逐步分组进行粗调,再进行直接插入排序的思想上面示例中所使用的分组跨度(4,2,1),被称为希尔排序的增量,增量的选择可以有很多种。在示例中所用的逐步折半的增量方法,是Donald Shell在发明希尔排序时提出的一种朴素方法,被称为希尔增量。

希尔排序的优化

为了保证分组粗调没有盲区,每一轮的增量需要彼此“互质”,也就是没有除1之外的公约数。

其中最具代表性的是Hibbard增量和Sedgewick增量。

Hibbard的增量序列如下:

1, 3, 7, 15……

通项公式为2k-1

利用此种增量方式的希尔排序,最坏时间复杂度是O(n^(3/2))

Sedgewick的增量序列如下:

1, 5, 19, 41, 109……

通项公式为9×4k-9×2k+1或者4k-3×2k+1。

利用此种增量方式的希尔排序,最坏时间复杂度是O(n^(4/3))

希尔排序是不稳定排序

什么是归并排序

分组
归并
两个长度为4的集合
创建一个额外的大集合,用于存储归并结果,长度是两个小集合之和。
(p1,p2,p是三个辅助指针,用于记录当前操作的位置。)
从左到右逐一比较两个小集合中的元素,把较小的元素优先放入大集合。
由于1<2,所以把元素1放入大集合,指针p1和p各右移一位
由于2<3,所以把元素2放入大集合,指针p2和p各右移一位
由于3<7,所以把元素3放入大集合,指针p1和p各右移一位
由于5<7,所以把元素5放入大集合,指针p1和p各右移一位
由于6<7,所以把元素6放入大集合,指针p1和p各右移一位;此时左侧的小集合已经没有元素可用
从另一个还有剩余元素的集合中,把剩余元素按顺序复制到大集合尾部

归并排序的时间复杂度为O(nlogn)

归并排序的空间复杂度为O(n)

归并排序是稳定排序,两个值相同的元素在归并之后,左侧的元素仍然在左,右侧的元素仍然在右

基数排序

基数排序


基数排序(Radix Sort):把字符串元素按位拆分,每一位进行一次计数排序的算法

基数排序既可以从高位优先进行排序(Most Significant Digit first,简称MSD),也可以从低位优先进行排序(Least Significant Digit first,简称LSD)

基数排序的时间复杂度是O(k(n+m))

基数排序的空间复杂度为O(n+m)

基数排序是线性排序算法

小结

汇总





《漫画算法2: 小灰的算法进阶》第一章 排序算法进阶的评论 (共 条)

分享到微博请遵守国家法律