排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序
更新时间:2023-07-29 20:54:01 阅读量: 实用文档 文档下载
- 归并排序算法描述推荐度:
- 相关推荐
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序。 2010-02-13 18:31
1、插入排序的基本方法是:
每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
(1)直接插入排序 (Insert Sort)
直接插入排序的基本思想是:
当插入第i (i≥ 1) 个对象时,前面的V[0], V[1], …, v[i-1]已经排好序。这时,用v[i]的关键码与v[i-1], v[i-2], …的关键码顺序进行比较,找到插入位置即将v[i]插入,原来位置上的对象向后顺移。
(2) 折半插入排序 (Binary Insert Sort)
折半插入排序的基本思想是:
设在顺序表中有一个对象序列V[0], V[1], …, v[n-1]。其中,v[0], V[1], …, v[i-1]是已经排好序的对象。在插入v[i]时,利用折半查找法寻找v[i]的插入位置。
(3)链表插入排序
1.链表插入排序的基本思想是:在每个对象的结点中增加一个链接指针数据成员 link。
2.对于存放于数组中的一组对象V[1], V[2], …, v[n],若v[1], V[2], …, v[i-1]已经通过指针link,按其关键码的大小,从小到大链接起来,现在要插入v[i], i = 2, 3, …, n,则必须在前面i-1个链接起来的对象当中,循链顺序检测比较,找到v[i]应插入(或链入)的位置,把v[i]插入,并修改相应的链接指针。这样就可得到v[1], V[2], …, v[i]的一个通过链接指针排列好的链表。
3.如此重复执行,直到把v[n]也插入到链表中排好序为止。
(4)(缩小增量法)
属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。
排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。
初始:d=5
49 38 65 97 76 13 27 49* 55 04
|----------------------------|
38 27
|---------------------------|
65 49*
|----------------------------|
97 55
|--------------------------|
76 04
|-----------------------------|
一趟结果
13 27 49 55 04 49 38 65 97 76
d=3
13 27 49 55 04 49 38 65 97 76
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序
|---------------|----------------|--------------------|
27 04 65
|----------------|----------------|
49 49 97
|----------------|-----------------|
二趟结果
13 04 49 38 27 49 66 65 97 76
d=1
13 04 49 38 27 49 66 65 97 76
|-----|-----|-----|-----|-----|-----|-----|-----|-----|
三趟结果
04 13 27 38 49 49 55 65 76 97
依照参考资料上的说法:“由于复杂的数学原因避免使用2的幂次步长,它能降低算法效率。”另外算法的复杂度为n的1.2次幂。因为非常复杂的原因(我也不知道过程),所以就不写了。
2、快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序列。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据(也称基准元素),然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:
1)设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)重复第3、4步,直到I=J;
例如:待排序的数组A的值分别是:(初始关键数据X:=49)
A[1] A[2] A[3] A[4] A[5] A[6] A[7]:
49 38 65 97 76 13 27
-|------------------------------------------------------|-
I(基准数据) J
进行第一次交换后: 27 38 65 97 76 13 49
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序
-|------------------------------------------------------|-
I J
进行第二次交换后: 27 38 49 97 76 13 65
-|------------------------------------|-
I J
进行第三次交换后: 27 38 13 97 76 49 65
-|--------------------------|-
I J
( 按照算法的第五步将又一次执行算法的第三步从后开始找
进行第四次交换后: 27 38 13 49 76 97 65
( 按照算法的第四步从前面开始找大于X的值,97>49,两者交换,此时J:=4 )
此时再执行第三不的时候就发现I=J,从而结束一躺快速排序,那么经过一躺快速排序之后的结果是: 27 38 13 49 76 97 65,即所以大于49的数全部在49的后面,所以小于49 的数全部在49的前面。
快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列。
4、链式基数排序
链式基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。有的逻辑关键字可以看成是由若干个关键字复合而成。
5、二路归并排序
合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2 个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长度为N的有序数据序列为止,这种排序方法称为2—路合并排序。
例如数组A有7个数据,分别是: 49 38 65 97 76 13 27,那么采用归并排序算法的操作过程如图7所示:
初始值 [49] [38] [65] [97] [76] [13] [27]
看成由长度为1的7个子序列组成
第一次合并之后 [38 49] [65 97] [13 76] [27]
看成由长度为1或2的4个子序列组成
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序
第二次合并之后 [38 49 65 97] [13 27 76]
看成由长度为4或3的2个子序列组成
第三次合并之后 [13 27 38 49 65 76 97]
合并算法的核心操作就是将一维数组中前后相邻的两个两个有序序列合并成一个有序序列。合并算法也可以采用递归算法来实现,形式上较为简单,但实用性很差。合并算法的合并次数是一个非常重要的量,根据计算当数组中有3到4个元素时,合并次数是2次,当有5到8个元素时,合并次数是3次,当有9到16个元素时,合并次数是4次,按照这一规律,当有N个子序列时可以推断出合并的次数是X(2 >=N,符合此条件的最小那个X)。
6、堆排序。
用最大堆排序的基本思想
① 先将初始文件R[1..n]建成一个最大堆,此堆为初始的无序区
② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key
③ 由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。
……
直到无序区只有一个元素为止。
正在阅读:
排序算法描述之插入排序、希尔排序、快速排序、链式基数排序、二路归并排序、堆排序07-29
生态学实验报告10-02
高考语文试题类型及应试策略(新课标版)03-30
学校优秀传统文化教育工作总结07-07
出入境证件照片规范 - 图文03-31
2013年国家司法考试(卷二)真题试卷(题后含答案及解析)08-08
2018年幼儿园会计工作总结09-28
重庆市地质灾害治理施工质量验收规定02-04
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 排序
- 链式
- 二路
- 希尔
- 归并
- 基数
- 算法
- 插入
- 描述
- 快速
- 室内装饰植物搭配全解
- a4纸读书笔记图片
- 《学前儿童健康教育》试卷及答案
- 单办台湾自由行入台证须知1
- 中药化学第三章:糖和苷类
- 一般抹灰作业指导书
- 中职学校晚自习辅导管理制度
- 英语六级高频词汇
- 第5章 选择结构程序设计
- 中国房地产经纪行业竞争分析及发展前景预测报告2015-2020年
- 雕塑调查报告 Microsoft Word 文档
- 弱电基础知识问卷
- 2012初中7-9年级中考语文复习(字词+古诗词+名著)
- 高等数学专升本模拟试题5
- 2015年普通高等学校招收内地新疆班高中毕业生计划和专业安排表
- 正规乒乓球比赛中乒乓球拍选用规则八项规定
- 10KV高压变频器操作说明书
- 度目录温州医学院规章制度目录
- 全国2013年最新中考英语专题整理 被动语态
- 使用普通电烙铁焊接铝材和不锈钢的简易方法