软件技术基础新(数据结构)
第 * /209页 一、插入排序 基本思想是:每步将一个待排序的记录,按关键码值的大小插入到前面已排序的适当位置上,直到全部插完为止。 1. 直接插入排序 在排好的序列中用顺序法查找插入位置,找到后将它后面的所有记录后移一个位置,再插入新记录。 排序n个记录的文件,关键码比较次数为n2量级,记录移动个数也为n2量级。 第 * /209页 基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],...进行比较,将比temp大的元素右移一个位置,直到发现某个j(0=j=i-1),使得a[j]=t或j为(-1),把t赋值给a[j+1]。 第 * /209页 void InsertSort(ElemType R[], int n) { int i,j; ElemType temp; /* 待排序元素用一个数组R表示,数组有n个元素 */ for (i=1; in; i++) { /* i表示插入次数,共进行n-1次插入 */ t=R[i]; /* 把待排序元素赋给t */ j=i-1; while ((j=0) (tR[j])) { R[j+1]=R[j]; j--; } /* 顺序比较和移动 */ R[j+1]=t; } } 时间复杂度:O(n2) 空间复杂度:O(1) 第 * /209页 哨兵的作用算法中引进的附加记录R[0]称监视哨或哨兵。哨兵有两个作用:① 进人查找(插入位置)循环之前,它保存了R[i]的副本,使不致于因记录后移而丢失R[i]的内容;② 它的主要作用是:在查找循环中“监视”下标变量j是否越界。一旦越界(即j=0),因为R[0]和自己比较,循环判定条件不成立使得查找循环结束,从而避免了在该循环内的每一次均要检测j是否越界(即省略了循环判定条件“j=1”)。 注意: ① 实际上,一切为简化边界条件而引入的附加结点(元素)均可称为哨兵。 ② 引入哨兵后使得测试查找循环条件的时间大约减少了一半,所以对于记录数较大的文件节约的时间就相当可观。对于类似于排序这样使用频率非常高的算法,要尽可能地减少其运行时间。所以不能把上述算法中的哨兵视为雕虫小技,而应该深刻理解并掌握这种技巧。 第 * /209页 2. 二分法(折半)插入排序 在已排好序的序列中使用二分法查找插入位置,找到后移动其后记录插入新记录。关键字比较次数降为nlog2n量级,记录移动个数仍为n2量级。 第 * /209页 void BinInsertSort (ElemType r[], int n) { ElemType temp; int i, j, low, hight, m; for (i=1; in; i++) {// r[0]已经有序,从r[1]开始 if (r[i].keyr[i-1].key) { // 准备插入 low = 0; high = i-1; while (low=high) { //折半查找法,寻找插入位置 m=(low+high)/2; if (r[m].keyr[i].key) high=m-1; //取左区间 if (r[m].keyr[i].key) low=m+1; if (r[m].key=r[i].key) { high=m; break; } } //while 结束, r[i]应该插在 high+1的位置上 第 * /209页 temp=r[i]; // 保存r[i], 同时留出移动的空间 j=i-1; while (j=high+1) { r[j+1]=r[j]
您可能关注的文档
- 课标解读_三年级英语_英语_小学教育_教育专区.ppt
- 课堂高效教学(小学)_培训.ppt
- 课堂调控技能指导培训.ppt
- 课程纲要_二年级语文_语文_小学教育_教育专区.ppt
- 课时达标练与测_初二数学_数学_初中教育_教育专区.pdf
- 课程设计xy工作台数控系统设计.pdf
- 课程设计会飞鸭子.ppt
- 课程设计单级行星齿轮减速器设计.pdf
- 课程设计在线学习系统设计与实现.doc
- 课堂教材医学统计学中sas分析.pdf
- (正式版)DB51∕T 1867-2014 《袋栽黑木耳生产技术规程》.docx
- (正式版)DB51∕T 2413-2023 《油橄榄密植丰产栽培技术规程》.docx
- (正式版)DB51∕T 2436-2017 《川菜东坡一品肉烹饪工艺技术规范》.docx
- (正式版)DB51∕T 2396-2017 《农村电子商务服务站(点)服务与管理规范》.docx
- (正式版)DB51∕T 2419-2017 《桢楠扦插育苗技术规程》.docx
- CN105145773B 一种无花果曲奇饼干及其制作方法 (江苏农林职业技术学院).docx
- CN105203825A 微测量电极的制作方法和热电势的测量方法及相关装置 (国家纳米科学中心).docx
- CN105137533B 一种啁啾光纤光栅及其制作方法 (南京航空航天大学).docx
- (正式版)DB51∕T 2453-2018 《巴山新居公共管理指南》.docx
- (正式版)DB51∕T 1892-2014 《川西北地区沙化土地治理技术规程》.docx
原创力文档

文档评论(0)