十大经典算法是什么

老刘

十大经典算法到底是啥?看完这篇终于搞懂了


说实话,我第一次听到“十大经典算法”这个说法的时候,脑子里完全是一团浆糊。

这玩意儿到底指什么?排序?搜索?机器学习?好像哪儿哪儿都有它的影子。

后来查了资料才发现,原来业界常说的“经典算法”主要分成两拨:一拨是我们面试必备的排序算法,另一拨是计算机解决问题的核心思想。今天咱们就聊聊这个,内容有点干,但我尽量讲得有意思点。


一、排序界的“老六”——基础排序三兄弟

1. 冒泡排序:这名字起的真接地气

要我说,冒泡排序绝对是所有算法里名字最形象的。

十大经典算法是什么

它怎么工作的呢? 想象一下水底的气泡往上冒,越往上越大。算法也是这个理——每次比较两个相邻的元素,如果顺序错了就把它们换位置。一轮下来,最大的那个数就像气泡一样“冒”到了最右边。

一句话概括:冒泡排序就是不停折腾,把最大的往后挪。

这算法代码写起来是真简单,但效率嘛...时间复杂度是O(n²),数据多了能把你急死。我大学那会儿老师让我们手写这个,真是写一次怀疑一次人生。

不过它也有优点——稳定。啥意思呢?相等的数据不会被调换顺序,这在某些场景下还挺关键的。

2. 选择排序:实在人干实在事

选择排序的思路特别实诚:

每一轮都从剩下的数据里挑出最小的,放到正确位置。

就像你整理房间一样,先把所有东西摊开,然后一件一件归位。简单粗暴,不需要啥技巧。

但它有个致命缺点——不稳定。举个例子:[5, 5, 3] 排序后,第一个5可能会跑到第二个5后面去,原来相等的数据顺序变了。

3. 插入排序:像整理扑克牌

这个算法,我觉得是最符合人类直觉的。

想象你手里有一把乱序的扑克牌,一张一张插到正确位置。右边已经排好序了,左边抽一张,往右边去找它该待的地儿。

特点:数据越接近有序,效率越高。

所以它特别适合基本有序的小规模数据。你要是让我排序10个8个的数,我肯定首选插入排序,代码少、效果快。


二、排序界的“卷王”——高级排序

4. 希尔排序:插入排序的升级版

这名字听着挺洋气,其实就是插入排序的亲戚

它怎么玩的呢?先把数据按照一定间隔分组,各组内用插入排序;然后缩小间隔,再排;直到间隔变成1,彻底排完。

说白了就是:分而治之,先粗调再精调。

这一下子就把插入排序的缺点给治了,速度快了不少。算是算法里的“smart guy”。

5. 归并排序:分久必合

“分治”思想的典型代表。

它的套路是:先把数据劈成两半,分别排序,然后再合并起来。就像把一堆乱麻将分成两堆,各自排好,再拼成一个有序的整体。

特点:稳定,速度快,时间复杂度O(n log n)。

但它有个毛病——需要额外的内存空间。你要排序1G的数据,可能得准备1G的临时空间。内存紧张的时候,这玩意儿能用但肉疼。

6. 快速排序:面试场的常客

这可能是所有排序算法里最出名的一个。

套路很简单:先选一个基准元素,把数据分成两部分,左边的都比它小,右边的都比它大。然后对这两部分递归执行同样的操作。

快排之所以快,是因为:原地排序,不需要额外空间,时间复杂度平均是O(n log n)。

但你说它完美吗?那倒也不是。最坏情况(比如数据已经有序)会退化成O(n²),这时候效率感人。

所以面试官特别喜欢问快排,不是没道理的。

7. 堆排序:二叉树的妙用

这个算法吧,属于那种听起来很高深,用起来很爽的类型。

它利用了二叉堆这种数据结构。你把数据建成一个堆,然后不断把堆顶(最大或最小)拿走,再调整堆,重复操作,就排好序了。

时间复杂度稳定O(n log n),不需要额外空间。

听起来挺完美?但实际用的人不多,因为常数因子大,缓存也不友好。不过如果你要排序海量数据,堆排序还是很香的。


三、其他经典算法

8. 基数排序:不比较大小

这玩法就有点另类了。

它不比较大小,而是按位数来排序。先按个位排,再按十位排,再按百位排...最后整体就有序了。

适合:整数排序,特别是数据范围不大的时候。

你说它巧不巧?确实巧。但局限性也明显——只能排整数,负数小数还得特殊处理。

9. 计数排序:桶的极致简化

如果数据范围特别集中,计数排序能快到你怀疑人生。

比如排序1000个人的考试成绩(0-100分),直接搞个101大小的数组,统计每个分数出现几次,然后按顺序输出来就行了。

时间复杂度O(n+k),空间换时间。

局限性嘛,范围太大了就歇菜。

10. 桶排序:计数排序的进阶

原理差不多,但更灵活一点。

把数据分到若干个桶里,每个桶内部排序,然后再按顺序把所有桶合并。能不能打,就看桶怎么分了。


写在最后

写到这里突然发现,十大算法说来说去好像全是排序?

也确实,排序是计算机最基础的操作之一,几乎所有程序员面试都得过这一关。

但我想说的是:算法不只是排序。

除了这些,还有贪心算法、分治思想、动态规划、回溯、图算法等等,每一個都是解决不同问题的钥匙。排序只是冰山一角。

你有没有发现,学算法最大的困难不是“不会”,而是“没用上”?

平时CRUD写习惯了,谁还管什么时间复杂度?但是,一旦遇到性能问题,这些“老古董”可就是救命稻草了。

行了,今天就聊到这儿,有啥问题评论区唠唠?

文章版权声明:文章内容均来源于各大短视频平台搜集以及修改和删减新增,如有侵权或者违规,请联系站长进行删除,如需转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,10人围观)

还没有评论,来说两句吧...

目录[+]