排序算法看这一篇文章就够了(附80道大厂面试题)

238 阅读5分钟

排序算法属于数据结构和算法的基础内容,并且也是大厂笔试中的高频考点。

今天这篇文章来简单梳理一下常见的排序算法、相关资料和大厂面试真题。

我们按照下面这幅图来梳理

 

按照“平均复杂度”划分,冒泡排序、选择排序、插入排序,它们算一类,这一类算法实现方式不同,但思路相同。都是对待排序数组的元素两两比较,一趟比较就需要n个元素参与计算,比较n趟,算法的平均时间复杂度就是 n^2,是最慢的排序算法。

而改进后的算法就是下面的希尔排序、归并排序、快速排序和堆排序,举个形象的例子来说下跟上面的区别,最上面的 3 个排序算法相当于你在公司兢兢业业,一步一步升迁,最终做到CEO的位置,而下面的 4 个算法,相当于破格提拔,跳跃式升迁,比前者就更快当上 CEO。

回到算法原理上,它们的目的就是将较小的元素尽可能地大幅往前调。以快速排序为例:  

待排序数据: [4, 7, 8, 2, 1]  ,第一趟排序后结果为: [1, 2, 4, 8, 7]

可以发现,元素 1、2 从倒数的位置经过一次排序就可以调到正数的位置,调整效率比冒泡一个一个往上冒快太多了。

除快速排序外,希尔排序、归并排序、堆排序都采用的是类似思想。

而最后三个排序算法计数排序、桶排序、计数排序,则是将这种跃迁的思想发挥到极致。回到刚刚那个形象的例子,相当于我们已经知道CEO是最高的职位,我们既不用一步一步升迁,也不用跳跃式升迁,一步到位直接坐上CEO位置。

对应到算法原理上,就是建立有序的数组(或桶),遍历一次待排序数组,只要将元素填入有序数组(或桶)对应的位置,就完成排序。这种算法虽然效率高,但也有缺点,只支持数字排序并且需要额外空间。

每一种算法我都收集了优质的资料和代码实现:

冒泡排序

选择排序

插入排序

希尔排序

归并排序

快速排序

堆排序

计数排序

基数排序

桶排序

面试题

...

共 76 道大厂面试真题,完整版点击: GitHub项目:76到排序算法大厂真题

如果对你有用,请给个 star, 后续不断更新优质内容。