排序算法属于数据结构和算法的基础内容,并且也是大厂笔试中的高频考点。
今天这篇文章来简单梳理一下常见的排序算法、相关资料和大厂面试真题。
我们按照下面这幅图来梳理
按照“平均复杂度”划分,冒泡排序、选择排序、插入排序,它们算一类,这一类算法实现方式不同,但思路相同。都是对待排序数组的元素两两比较,一趟比较就需要n个元素参与计算,比较n趟,算法的平均时间复杂度就是 n^2,是最慢的排序算法。
而改进后的算法就是下面的希尔排序、归并排序、快速排序和堆排序,举个形象的例子来说下跟上面的区别,最上面的 3 个排序算法相当于你在公司兢兢业业,一步一步升迁,最终做到CEO的位置,而下面的 4 个算法,相当于破格提拔,跳跃式升迁,比前者就更快当上 CEO。
回到算法原理上,它们的目的就是将较小的元素尽可能地大幅往前调。以快速排序为例:
待排序数据: [4, 7, 8, 2, 1] ,第一趟排序后结果为: [1, 2, 4, 8, 7]
可以发现,元素 1、2 从倒数的位置经过一次排序就可以调到正数的位置,调整效率比冒泡一个一个往上冒快太多了。
除快速排序外,希尔排序、归并排序、堆排序都采用的是类似思想。
而最后三个排序算法计数排序、桶排序、计数排序,则是将这种跃迁的思想发挥到极致。回到刚刚那个形象的例子,相当于我们已经知道CEO是最高的职位,我们既不用一步一步升迁,也不用跳跃式升迁,一步到位直接坐上CEO位置。
对应到算法原理上,就是建立有序的数组(或桶),遍历一次待排序数组,只要将元素填入有序数组(或桶)对应的位置,就完成排序。这种算法虽然效率高,但也有缺点,只支持数字排序并且需要额外空间。
每一种算法我都收集了优质的资料和代码实现:
冒泡排序
-
算法讲解
-
算法实现
选择排序
-
算法讲解
-
算法实现
插入排序
-
算法讲解
-
算法实现
希尔排序
-
算法讲解
-
算法实现
归并排序
快速排序
堆排序
计数排序
-
算法讲解
-
算法实现
基数排序
桶排序
-
算法讲解
-
算法实现
面试题
- 【2021届阅文大数据方向笔试卷】 快速排序
- 【2021届阅文大数据方向笔试卷】 冒泡排序
- 【2021届阅文Java方向笔试卷】 数据多项排序
- 【格力2020秋招后端岗笔试题】 请简述冒泡排序原理
- 【金山办公2020校招计算机视觉】 待排序元素规模较小时,宜选取哪种排序算法效率最高
- 【2021届阅文PHP方向笔试卷】 使用PHP实现快速排序
- 【2021届阅文Java方向笔试卷】 对MAP进行排序
- 【2021届阅文C 方向笔试卷】 对struct进行排序
- 【金山办公2020校招自然语言处理NLP工程师笔试题】 排列顺序对算法的性能影响
- 【乐信2020校园招聘数据笔试题】 排序算法时间复杂度
- 【2021小米秋招】 选择排序
- 【2021届阅文测试开发方向笔试卷】 排序算法对比
- 【贝壳找房2021届校招移动端类试卷】 赛季总排名
- 【途虎养车2021秋招Java笔试】 合并两个有序数组
- 【声网2020校招-通用C++笔试题】 代码判断排序算法
...
共 76 道大厂面试真题,完整版点击: GitHub项目:76到排序算法大厂真题
如果对你有用,请给个 star, 后续不断更新优质内容。