极客算法训练笔记(六),十大经典排序之希尔排序,快速排序

极客算法训练笔记(六),十大经典排序之希尔排序,快速排序

首页卡牌对战小龙飞飞游戏更新时间:2024-04-29
抛砖引玉

十大经典排序算法江山图

排序算法的衡量指标我这里不再重复,上一篇我已经列举分析的很清楚了,但是非常重要,没看到我上一篇的小伙伴墙裂推荐,这里给一个直通车票 极客算法训练笔记(五),十大经典排序之冒泡,选择,插入排序 。

冒泡,选择和插入排序,它们的时间复杂度都是O(n2),比较高,适合小规模数据的排序,当有大规模的数据需要排序的时候这三种排序算法就有点吃不消了,所以需要进行优化,先来看看优化的思路:

  1. 首先,冒泡,选择和插入排序的第一步都是全部遍历,要想再有突破,将平均时间复杂度降低到O(n log n),那肯定不能从头遍历了,考虑一下部分遍历。
  2. 其次,排除弟中弟的选择排序,分析江山图得知冒泡排序和插入排序的时间复杂度,在最好情况和最坏情况下差了一个指数级别,这个地方有很大的优化空间让大神们发挥。

实际上,欲抱琵琶半遮面的希尔排序和大概是个程序员都听说过但大部分人都不清楚的快速排序,分别就是插入排序和冒泡排序的变种,而且这两个排序分别前后脚,一个在1959年另一个于1960年问世。

希尔排序

鉴于网上很多文章 上来就讲希尔排序是什么样的,但是都没有说明为什么会有这个版本排序,怎么演变过去的,所以这里我来分析一下,有不同的意见欢迎分享。

十大排序将军都有正经的名字,就这个希尔排序是个洋名字,想必大家猜也猜得到,是用这个算法的提出人希尔(Donald Shell)名字命名的。学算法都辣么难,打破固有的思维模式,创造一个算法那就更加了不起了,希尔一个小小的改动就把插入排序的时间复杂度从指数级别降下来了,把牛皮打在公屏上(插入排序去看我的上一篇,上面可坐直通车)。

快速排序

百度百科说快排是冒泡排序的变种,我找了全网也没找到为什么。我很讨厌别人跟我说,xxx,这是结论,但是又不告诉我为什么,不是我天生反骨不服管教,一个东西总不可能凭空出现,哪怕说一说背景来历也比尬看代码好,花了半条命看懂了还记不住,我喜欢探寻物于物之间的联系,这对于拓展和帮助记忆都是非常有趣的(同意的评论区扣1)。

快排利用了分治的思想,分而治之,分治算法的基本思想是将一个规模为N的问题,分解成K个规模较小的子问题,这些子问题相互独立且问题性质相同。 求解出子问题的解,合并得到原问题的解。拆分问题总不可能手脚并用一个个拆分,因此分治算法大多采用递归实现。

为什么说快排是冒泡排序的变种?

首先,每次重复,pivot 一定会有序,这点和冒泡排序很像,冒泡排序也是每次遍历冒泡,都会有一个元素排序正确;再者,快排也是两两比较,交换位置,和冒泡排序也是相似的,快排的核心交换代码和冒泡神似,这些点可说快速排序是冒泡排序的变种。

还是3 1 1 2数组分析,第一次分区 [2,1,1], [3],第二次分区[1,1,2],[3],这里两个 1 就调换了位置

原本是想这篇写四个算法的,但是没想到这两个算法写了这么多内容,因此这篇暂且写这两篇,归并排序和堆排序下一篇再写,如果有错误欢迎批评指正,另外欢迎大家关注我的公众号《阿甘的码路》,我是小魔女阿甘,交个朋友最好啦!

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved