排序算法

排序算法分类

    排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。

    快速法和归并法都可通过分解区间,将排序规模有n的转化为n/2,递归转化为n/4,n/8...直到1,因此平均时间复杂度为O(n*logn)。

排序算法简析

1.冒泡排序

简介:

时间复杂度:最坏O(n^2), 平均O(n^2)。

步骤:

    1.从开始第一对到最后一对,每对相邻元素比较,第一个比第二个大则交换。最大值被排到最后。

    2.从开始第一对到倒数第2对,重复第1步操作。第二大的元素被排到倒数第2的位置。

    3.以此类推,从开始第一对到倒数第n对,重复第1步操作。第n大的元素被排序到倒数第n的位置,直至排序完成。

2.快速排序 

简介:

    选定一个元素,将要排序的记录分隔为大小两个区间,然后分别对子区间进行快速排序。

    时间复杂度为:最坏O(n^2)  平均O(n*logn)  空间复杂度O(n*logn)

步骤:

    1.选定一个元素,把整个队列过一遍,使其左边的元素都小于或等于它,其右边的元素都大于或等于它。

    2.对选定元素左右子区间分别进行快速排序(递归)。

3.选择排序

简介:

    从待排记录选择最小元素交换到待排记录的首位,完成所选元素的排序。对其余未排序元素进行选择排序。是对冒泡排序的改进。

    时间复杂度:最坏O(n^2) 平均O(n^2)。

步骤:

    第1轮,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;

    第2轮,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;

    以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕

4.插入排序

简介:

    检查第i个数字,如果在它的左边的数字比它大,进行交换。这个比较一直继续直到这个数字的左边数字比它还要小。结果是将第i个数字放到左边恰当的位置去。

    插入排序不适合对于数据量比较大的排序应用。

    但如果已经很有序,需要排序的数据量很小,例如量级小于千,那么插入排序还,接近线性复杂度O(N) ,是一个不错的方案。

    时间复杂度:最坏O(n^2)  平均O(n^2)  最好O(N) 

    直接插入排序是稳定的排序。

步骤:

    第1轮,检查第2个元素,如果左边的元素比它大,进行交换。

    第2轮,检查第3个元素,如果左边的元素不比它大,则不做任何处理,结束本轮操作。如果左边第2个元素比它大,进行交换。继续与左边第1个元素重复上述比较和交换操作。

    以此类推,检查第n个元素,将第n个元素放到左边恰当的位置。直至排序结束。

归并排序

简介:

    归并排序是利用二分法实现的排序算法,是一种比较快速的排序算法。

    时间复杂度:最坏、最佳、平均情况下均为o(nlogn),稳定。

    空间复杂度:O(n*logn)

步骤:

    第1步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。

    第2步:设定两个指针,最初位置分别为两个已经排序序列的起始位置。

    第3步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。

    重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾

排序算法使用原则

    1.根据数据的不同特点使用最合适的排序方法。

    2.根据不同的排序算法优缺点,根据排序的不同阶段数据的特点,组合使用几种算法。

    快速法和插入法结合:当分区的规模达到一定小时,便停止快速排序算法。对着个“几乎”排序完成的有序数列使用插入排序算法进行排序(这时插入法有着接近线性的复杂度)。

    快速法和和堆排序法结合:开始采用快速排序算法进行排序,当递归达到一定深度时就改为堆排序来处理。


    附:排序算法代码:http://iprogram.com.cn/Article/Item/211.html

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

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,183评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,730评论 0 15
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,342评论 0 1
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 2,270评论 0 35
  • 你常走着 一手沙漠一手凉夏 鞋子在街上漫舞 你又找着珠子 偏见了彩虹 忘了回去的鞋子
    流漫陆离阅读 178评论 0 0