




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京邮电大学电信工程学院数据结构实验报告实验名称: 实验4用简单数组实现排序日 期: 2009年12月6日1实验要求使用简单数组实现下面各种排序算法,并进行比较。排序算法: 1、插入排序 2、希尔排序3、冒泡排序4、快速排序5、简单选择排序6、堆排序(选作)7、归并排序(选作)8、基数排序(选作)9、其他要求: 1、测试数据分成三类:正序、逆序、随机数据2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)4、对2和3的结果进行分析,验证上述各种算法的时间复杂度编写测试main()函数测试线性表的正确性2. 程序分析r1r2 ri-1 ri ri+1 rn有序区 无序区 直接插入排序的基本思想图解插入到合适位置rj rj+1 ri+1 rn-1 rn 无序区 有序区 1ji-1 已经位于最终位置 起泡排序的基本思想图解反序则交换 r1 r2 ri-1 ri ri+1 rmin rn 有序区 无序区 已经位于最终位置 rmin为无序区的最小记录 简单选择排序的基本思想图解交换 r1 ri-1 ri ri+1 rn 均ri 轴值 均ri 位于最终位置 快速排序的基本思想图解2.1 存储结构数组:数组下标: 0 1 2 3 4 5 6数组元素A7A6 A5A4 A3 A2 A1 2.2 关键算法分析快速排序为代码:1将i 和j分别指向待排序区域的最左侧记录和最右侧记录的位置;2重复下述过程,直到i=j 2.1右侧扫描,直到记录j的关键码小于基准记录的关键码;2.2 如果ij,则将rj与ri交换,并将i+; 2.3左侧扫描,直到记录i的关键码大于基准记录的关键码; 2.4 如果ij,则将ri与rj交换,并将j-;3退出循环,说明i和j指向了基准记录所在位置,返回该位置;直接顺序排序void InsertSort(int r, int n)int ay=0;int ab=0; for (int i=2; in; i+) ab+; r0=ri; /设置哨兵 for (int j=i-1; r0rj; j-) /寻找插入位置 rj+1=rj; /记录后移 rj+1=r0; ay+; for(int k=1;kn;k+)/循环输出数据 coutrk ; coutn;cout关键字移动次数:3*ayendl; cout关键字比较次数:ab=1; d=d/2) /以增量为d进行直接插入排序 for (i=d+1; i0 & r0rj; j=j-d) rj+d=rj; /记录后移d个位置 rj+d=r0; by+; for(i=1;in;i+)/循环输出数据 coutri ; coutn;cout关键字移动次数:3*byendl;cout关键字比较次数:bbendl;起泡排序void BubbleSort(int r, int n)int cy=0;int cb=0;int temp;int exchange;int bound; exchange=n-1; /第一趟起泡排序的范围是r0到rn-1while (exchange) /仅当上一趟排序有记录交换才进行本趟排序 cb+;bound=exchange; exchange=0; for (int j=0; jrj+1) temp=rj; rj=rj+1; rj+1=temp; exchange=j; /记录每一次发生记录交换的位置 cy+; for(int i=0;in;i+)/循环输出数据 coutri ;coutn;cout关键字移动次数:3*cyendl;cout关键字比较次数:(2*n-1-cb)*cb/2endl;快速排序一次划分int Partition(int r, int first, int end)int i=first; /初始化int j=end;int temp; while (ij) while (ij & ri= rj)j-; db+; /右侧扫描 if (ij) temp=ri; /将较小记录交换到前面 ri=rj; rj=temp; i+; dy+; while (ij & ri= rj) i+; db+; /左侧扫描 if (ij) temp=rj; rj=ri; ri=temp; /将较大记录交换到后面 j-; dy+; return i; /i为轴值记录的最终位/快速排序void QuickSort(int r, int first, int end) if (firstend) /递归结束 int pivot=Partition(r, first, end); /一次划分 QuickSort(r, first, pivot-1);/递归地对左侧子序列进行快速排序 QuickSort(r, pivot+1, end); /递归地对右侧子序列进行快速排序简单选择排序void SelectSort(int r , int n) int ey=0,eb=0;int i;int j;int index;int temp; for (i=0; in-1; i+) /对n个记录进行n-1趟简单选择排序 eb+; index=i; for (j=i+1; jn; j+) /在无序区中选取最小记录 if (rjrindex) index=j; if (index!=i) temp=ri; ri=rindex; rindex=temp; ey+; for(i=0;in;i+) coutri ; coutn;cout关键字移动次数:3*eyendl;cout关键字比较次数:eb*(eb+1)/2endl;排序方法平均情况最好情况最坏情况辅助空间直接插入排序O(n2)O(n)O(n2)O(1)希尔排序O(nlog2n)O(n2)O(n1.3)O(n2)O(1)起泡排序O(n2)O (n)O(n2)O(1)快速排序O(nlog2n)O(nlog2n)O(n2)O(log2n) O(n)简单选择排序O(n2)O(n2)O(n2)O(1)堆排序O(nlog2n)O(nlog2n)O (nlog2n)O(1)归并排序O(nlog2n)O(nlog2n)O(nlog2n)O(n)排序方法最好情况最坏情况平均情况直接插入排序O(n)O(n2)O(n2)起泡排序0O(n2)O(n2)简单选择排序0O(n)O(n)3. 程序运行结果程序结束排序数据直接排序希尔排序起泡排序简单选择排序快速排序平均情况下快速排序为最优排序4总结排序过程通常要进行下列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城镇危房整治方案范本
- 2o18从业资格证考试及答案解析
- 合肥市会计从业资格考试及答案解析
- 荥阳出租车从业人员考试及答案解析
- 冠脉支架植入术的护理
- 商用开水器维修施工方案
- 初中生用电安全教育题库及答案解析
- 危重患者护理查房
- 木头门牌改造方案范本
- 临床医学系职业生涯规划书
- DL∕T 1679-2016 高压直流接地极用煅烧石油焦炭技术条件
- 档案专业人员职业能力竞赛考试题库(含答案)
- 同种异体骨软骨移植与软骨修复
- 故障分析实验报告
- 行为生活方式与健康智慧树知到期末考试答案章节答案2024年杭州师范大学
- JTS-165-6-2008滚装码头设计规范-PDF解密
- 铸造企业安全生产标准化管理体系方案资料汇编(2022-2023新标准实施模板)
- 设备维修与保养(课件)
- 浅谈国内外深基坑支护技术的现状及进展
- 网络舆情应对及处置
- 工业数据采集技术及应用 -配置能源采集仪表参数
评论
0/150
提交评论