郴州| 鄂州| 大英| 左云| 壤塘| 睢县| 珲春| 巴塘| 平远| 宁县| 邵阳市| 颍上| 沧州| 涿鹿| 通道| 西乡| 高碑店| 石阡| 三明| 凌源| 孟连| 淳安| 措勤| 河口| 榆树| 利辛| 桑日| 四方台| 清河| 本溪满族自治县| 赫章| 桦川| 金佛山| 沐川| 监利| 光泽| 泗阳| 江都| 循化| 邳州| 玛沁| 贡山| 会泽| 嵩明| 威宁| 宜秀| 资中| 西畴| 南票| 丹凤| 饶平| 朝阳县| 湖北| 克拉玛依| 湖北| 贵德| 宝应| 仪陇| 昭通| 景洪| 弋阳| 盐边| 岗巴| 马鞍山| 噶尔| 普洱| 连云区| 阿图什| 万源| 石景山| 张家港| 华阴| 澄海| 汉沽| 灵川| 施甸| 五原| 嘉禾| 陵川| 金坛| 高碑店| 南陵| 惠民| 户县| 新野| 乌拉特前旗| 翁牛特旗| 门头沟| 开化| 沈阳| 东山| 霍城| 嘉峪关| 苍南| 萍乡| 濠江| 平武| 昌黎| 永昌| 苗栗| 天山天池| 镇安| 耿马| 株洲县| 偃师| 乐东| 盐山| 佳木斯| 礼泉| 无锡| 嘉禾| 乐业| 灵石| 墨江| 双辽| 芷江| 大洼| 泗水| 勐海| 松桃| 来凤| 宝应| 德兴| 牟平| 西吉| 吴堡| 桑日| 涞水| 金山屯| 屏山| 唐县| 雷州| 嘉荫| 天池| 霍邱| 石景山| 河池| 农安| 麻阳| 哈巴河| 从化| 平邑| 革吉| 渭南| 平川| 海淀| 保康| 扶绥| 宁陵| 疏勒| 凌海| 三都| 西安| 台中县| 绥江| 惠来| 肥乡| 岳池| 垦利| 鹿寨| 青岛| 陇南| 秀山| 莎车| 山西| 大通| 班玛| 环县| 白银| 滦平| 许昌| 和硕| 桦甸| 富民| 吴江| 黄冈| 界首| 合浦| 奉节| 绵竹| 长武| 山东| 东川| 井陉| 腾冲| 太谷| 乌什| 玉门| 丰台| 铁岭市| 东丰| 牡丹江| 新丰| 宝鸡| 冷水江| 贵池| 潍坊| 宝清| 沙洋| 漳浦| 沂南| 安国| 米泉| 和布克塞尔| 中牟| 海晏| 容县| 漯河| 唐山| 城阳| 新野| 隆子| 奉贤| 横县| 石家庄| 岳普湖| 茌平| 淮南| 遵化| 湘阴| 黑河| 开鲁| 密山| 任丘| 府谷| 常州| 海沧| 永平| 突泉| 晋城| 天祝| 耿马| 都安| 丰都| 阿克陶| 马关| 邵阳市| 保康| 肃南| 平南| 永昌| 黄埔| 闵行| 畹町| 闽侯| 环县| 伊宁县| 东海| 永福| 囊谦| 建平| 刚察| 梅里斯| 商洛| 乌恰| 梨树| 桃江| 阳东| 巴南| 津市| 广灵| 睢县| 南平| 临高| 皇冠体育
当前位置: > 华清远见教育集团 > 嵌入式学习 > 讲师博文 > 数据结构排序算法有哪些常用的
数据结构排序算法有哪些常用的
时间:2018-05-21作者:华清远见

首先对排序有个宏观的了解, 排序的思想是这样的,将有序的记录序列(或称)按照一定的关键字,将一个序列排列成想要得到的一个新的序列。基本上现在的排序可以区分以下几类:内排序和外排序,稳定排序和不稳定排序。

内排序:整个排序过程,所有元素调到内存中进行的排序。内排序效率用比较次数来衡量。

外排序:数据量较大的情况下,需要借助外部存储设备才能完成排序。外排序用读/写外存的次数来衡量效率,块与块之间不能保证有序。

排序的性能比较基本的是其稳定性,之后就是时间复杂度,空间复杂度了。

稳定排序:对于相的元素来说,在排序之前和之后的顺序是一样的。

不稳定排序:对于相同的元素来说,在排序之前和之后顺序发生了变化。

根据使用的实际情况,用到内排序的还是较多,所以重点讨论几种内排序。几种常见的排序算法大概有以下图中所示几种:

数据结构排序算法

那么,举几个例子,讲解下其应用的相关排序算法。

(一)冒泡排序

思想:反复扫描待排序序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。第一趟,从第一个数据开始,比较相邻的两个数据,(以升序为例)如果大就交换,得到一个大数据在末尾;然后进行第二趟,只扫描前n-1个元素,得到次大的放在倒数第二位。以此类推,后得到升序序列。如果在扫描过程中,发现没有交换,说明已经排好序列,直接终止扫描。所以多进行n-1趟扫描。

例:设记录key集合k={50,36,66,76,95,12,25,36},排序过程如下:

数据结构排序算法

后排序结果为红色背景的顺序。

(二)简单选择排序

思想:第一趟时,从第一个记录开始,通过n – 1次关键字的比较,从n个记录中选出关键字小(大)的记录,并和第一个(可以是后一个)记录进行交换。第二趟从第二个记录开始,选择小(大)的和第二个记录交换。以此类推,直至全部排序完毕。

例:设记录key集合k={50,36,66,76,95,12,25,36},排序过程如下:

数据结构排序算法

(三)快速排序

思想:冒泡排序一次只能消除一个逆序,为了能一次消除多个逆序,采用快速排序。以一个关键字为轴,从左从右依次与其进行对比,然后交换,第一趟结束后,可以把序列分为两个子序列,然后再分段进行快速排序,达到高效。

例:设记录的key集合k={50,36,66,76,36,12,25,95},每次以集合中第一个key为基准的快速排序过程如下:

数据结构排序算法

(四)直接插入排序

思想:基本的插入排序,将第i个插入到前i-1个中的适当位置。

例: 设文件记录的key集合k={50,36,66,76,95,12,25,36}(考虑到对记录次key排序的情况,允许多个key相同。如此例中有2个key为36,后一个表示成36,以示区别),按直接插入排序方法对k的排序过程如下:k={50,36,66,76,95,12,25,36}

数据结构排序算法

上面呢,通过例题加图示的方式,简单的分析了其中的4个排序算法,是否理解了呢?好了,其他排序算法的分析我们以后有时间再讲。当然,理解了这种套路的话,或者你来总结一下。


发表评论
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
西青道跃进里 兴达街道 湖仔尾 西渠镇 公元前
所罗门群岛 东岸镇 香洲街道 广东中山市东凤镇 碎肉抓饭
中国线上博彩 电子博彩 线上博彩