从算法到算命—八大排序算法之入门篇
从算法到算命—八大排序算法之入门篇
前言
话说曾经,有一只神奇的动物叫做插帽龟,这只龟有个特点,就是它很稳。
这龟有个爱好,喜欢选择帽子插入到自己身上,它给这个过程想了一个比较好听的名字,叫做选帽插。
但是它插完,就慌了。
这只龟因为过于紧张,掉到河里淹死了,这时候,被路过的N佬看见了,把它捡出来给埋了。
埋了的小土堆,给起名叫做快龟堆,最后,在快龟堆旁边立了个牌子,上面写着:只因(基)你太稳!
从此之后,每一位路过的人,看见了”只因你太稳“的牌子后,都会嗯一声,然后在离开。
直到这里,你是不是还不知道在说些什么,是否有很多问号?
这其实说的就是这八大排序的时间复杂度的情况,那么事不宜迟,快让我们具体来看看这则小故事讲的是什么吧!
首先先上图:
关键词详解
插帽龟:插入排序 冒泡排序 归并排序
它很稳:这三个排序都是稳定的
选帽插:选择排序 冒泡排序 插入排序
就慌了: 慌的发音很像方,方代表什么呢?其实就是它们的一个平均时间复杂度是O(n2)
快龟堆、N佬:这其实对应的是 快速排序 归并排序 堆排序。这三个的时间复杂度,通过N佬我们可以联想到Nlog,进而转换为时间复杂度 O(NlogN)
只因(基)你太稳:这个就比较好理解了,没事别天天尬黑哥哥~(哈哈,开个玩笑),这里代表的就是基数排序是稳定的
嗯:基数排序的时间复杂度通常可以表示为O(d * (n + k)),其中d是输入数据的位数,n是数据的数量,k是基数的大小(例如10【十进制】、2【二进制】)。但是当数据的位数d较小且基数k较小的情况下,基数排序的时间复杂度可以近似为O(n)。
那么通过上面的一个小故事,和里面关键词的一个详解,你是不是能够稍微清楚了一点在说什么呢?其实上面的内容基本包含了大部分排序的平均时间复杂度和是否稳定,当然,我们暂时先排除希尔(shell)排序哈,因为它稍微有点特殊。
说在最后
思来想去,还是打算将这个小故事单独放一个篇章。学习算法相对来说是一个比较苦的过程,排序作为较为基础的算法,我认为将每种算法单独拆开来介绍的效果会比较好,全部堆在一篇文章内,会导致过于臃肿,而自己,也很可能丧失了学习算法的兴致。这一篇我认为还算是比较有意思,比较好记,希望大家也可以稍微理解一下其中的内容。关于时间复杂度和是否稳定,我觉的说重要也不重要,说不重要又很重要,希望这个小故事能够让大家可以带着轻松愉悦的心情来学习排序。后面各个排序算法的详解,还要有请我们的插帽龟来给大家详细讲解呢,希望再难,大家也不要丧失了对学习的耐心呀~