2018-03-11 几种常见算法

1. 冒泡排序Bubble Sort(体育委员摸头杀)

时间复杂度:O(n2)
有个数组a=[5,4,1,3,2,6],从小到大排序,总共进行a.length-1轮,首先将a[0]和a[1]比较,谁大就把谁放在后面,交换完后再将a[1]和a[2]比较,谁大就把谁放在后面,交换完后再将a[2]和a[3]比较.....一直到a[4]和a[5]比较,进行完第一轮后,最大的那个就已经放在最后一位了,接下来再重新从a[0]开始......直到进行到a[3]和a[4]比较(a[5]上一轮已经确定了最大的,不用再动了),直到a[2],a[3],a[4],a[5]都确定了,最后再比较一次a[0],a[1],排完a[0],a[1]的顺序,a数组的顺序就排好了~
点BUB是冒泡排序的动画演示

冒泡排序

2. 选择排序Selection Sort(体育老师点人法)

时间复杂度:O(n2)
选出最小的和第一位交换位置,第一位就被确定了,接下来找倒数第二小的和第二位换位置,接着再找倒数第三小的和第三位换位置......一直找到最后一位
点SEL是冒泡排序的动画演示

选择排序

3. 插入排序Insertion Sort(起扑克牌法)

时间复杂度:O(n2)
从数组的第二个开始,和第一个比较并排顺序,接着拿第三个和第二个比,若比第二个大则直接不动,若比第二个小则和第一个比,若比二小比一大则插在它们中间,若比第一个小则放在第一个,接着再拿第四个分别和三、二、一
比.......直到最后。
这就像打扑克牌时你摸牌的方法
点INS是冒泡排序的动画演示

4. 随机快排

优点:
效率高,时间复杂度:O(n*log2n)
缺点:
有时候比计数排序慢
简介:
随机选一个数,例:36,#将这个数和第一个数交换位置,于是36到了第一位,接着将36和其他所有数依次比较大小,把所有比36小的放左边,比36大的放右边,比完其他所有数后把36同比它小的数里的最右边的那个交换位置,这样36就定位了。
接着以同样的方式随机选择一个36左边的数,然后回到上面#的位置继续进行,在36的左边再次快排,这样左边排序时完全不用管右边,大大提高了效率,把左边排完再排右边。
演示:点R-Q是随机快排

5. 计数排序(Hash)

优点:
效率高,时间复杂度:O(n+max)
缺点:
1.需要一个hash来作为工具
2.无法对小数和负数进行排序,只能排正整数
3.可能需要很多桶,不像桶排序可控制桶数量
用途:
数字相差不大的时候可以用计数排序,如年龄排序
简介:
和基数排序差不多,比快排更快,需要一个额外数组(Hash)辅助,例:a=[3,2,4,5,1,3,34]
a[0]=3于是将Hash数组中的hash[3]=1
a[1]=2于是将hash[2]=1
a[2]=4于是将hash[4]=1
a[3]=5于是将hash[5]=1
a[4]=1于是将hash[1]=1
a[5]=3于是将hash[3]=hash[3]+1=2
a[6]=34于是将hash[34]=1
这样hash=[ ,1,1,2,1,1, , , , ,......, , , , ,1]
最后将hash中的数据按顺序取出来存放在另外一个数组里则排序完成。

6. 桶排序(Hash)

优点:
和计数排序不同的是一个桶里可放多个数字,效率高,计数排序的改良版,时间复杂度:O(N+C)
缺点:
需要hash工具,和计数排序不同的是每个桶里都是无序的,还要再排一次序
用途:
高考总分排序,每100分放在一个桶里,数字很分散的时候不好用,可用基数排序(比如从几十到几千)
简介:
a=[0,2,1,56,32,67,32],存入hash里

hash = {
  '0':[0,2,1],
  '1':[],
  '2':[],
  '3':[32,32],
  '4':[],
  '5':[56],
  '6':[67],
}

还要把每个桶里的数字排序一下,再依次拿出来

7. 基数排序Radix Sort(Hash)

优点:
效率高
桶数量是确定的,时间复杂度:O(nlog(r)m)
缺点:
需要一个hash当工具,要多次排序
简介:
和桶排序类似,数字很分散的时候,可以用基数排序,首先用个位排,每次出桶的时候要按照进桶的顺序出!再到百位,再到千位,具体看下面演示

演示:点RAD是基数排序

8. 堆排序

时间复杂度:nlogn
用数组表示一个堆,每次都做最大堆排序,每做完一次就把最大的数和最后一位交换位置,并定下来,于是每做一次最大堆排序就能确定一个最大的数并把它放到最后一位,一直重复到排完所有的数,这样一个从小到大的数组就排出来了
演示:堆排序

9. 归并排序

本文版权归彭奕泽和饥人谷所有

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 629评论 0 0
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,101评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,706评论 0 15
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,763评论 0 7
  • 记得小时候,家住在农村,那时候上学比较晚,一到下午,就跟着大人出去放羊,安顿好羊,大人们就去割草,小孩子们就在一块...
    园园do阅读 421评论 0 2