- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计
实验报告
内部排序算法比较
08级计算机科学与技术专业
郭磊
2010年06月13日
【实验简介】
在教科书各种内部排序算法的时间复杂度分析结果只给出了算法执行的时间的阶,或大概的执行时间,如:直接插入排序即时间复杂度为O(n*n)
通过五组随机数据、一组正序数据与一组逆序数据比较6种常用的内部算法(起泡排序、直接插入排序、简单选择排序、快速查找排序、希尔排序、堆排序)的关键字比较次数和关键字移动次数,以取得直观感受;
用五组不同的长度不小于100的数据进行测试,并对测试结果作出简单的分析,对得出结果拨动大小的进行解释;
【设计模块】
【对应模块算法说明】
(1) 此算法程序中需要用到顺序表数据类型,数据元素的类型定义如下:
typedef struct{
KeyType key; //关键字项
}RedType;
typedef struct{
RedType r[MAXSIZE+1]; //0号单元闲置或用作哨兵单元
int length; //顺序表长度
int info; //记录关键字移动次数
int cmp; //关键字的比较次数
}Sqlist;
(2) 本实验用到六种排序算法,一个主函数和菜单函数,其中排序算法分别为起泡排序、直接插入排序、简单选择排序、快速查找排序、希尔排序、堆排序;相应时间复杂度分析如下:
起泡排序:若待排序列为“正序”,则需进行一趟排序在排序过程中关键字需进行n-1次比较,无须移动纪录;若是“逆序”,则进行n-1趟排序,需n(n-1)/2次比较,并坐等数量级的移动,因此总的事件复杂度为O(n2);
直接插入排序 待排序纪录是随机的,关键字间的移动次数和比较次数的平均值约为n*n/4,即时间复杂度为O(n2);
简单的选择排序 虽然在排序过程中所需要的移动次数较少,最小时为0,最大时为3(n-1);但是关键字的比较次数总是相同的,均为n(n-1)/2,因此,时间复杂度亦为O(n2);
快速排序 其平均时间是kn*㏑n,其中n为待排序列中纪录的个数,k为某个常数,其时间复杂度为O(n*㏑n);
希尔排序 当增序序列为dlta[k]=2t-k+1-1时,时间复杂度为O(n3/2),其中t为排序趟数,1≤k≤t≤㏒2(n+1);
堆排序 此排序对于含n个元素的序列排序时,总共进行的关键字比较次数不超过4n,且在最坏的情况下,其时间复杂度为O(n*㏑n);
算法分析如下:
① 冒泡排序 该算法的的思路是首先将第1个记录的关键字负值给L.r[0],然后用L.r[0]与第(i+1)个记录的关键字比较,若为逆序,则交换第i与第i+1两记录的位置,然后让i加1,重复以上操作,直至i=n-1为止;依次进行第二趟、第三趟……作同样的操作,直至所有的记录按正序排列(一般需要n-1趟比较,第i趟从L.r[1]到L.r[n-i+1]依次比较,1≦ i ≦n-i,比较结果是让其中最大的记录放在L.r[n-i+1]的位置)
void BubbleSort(Sqlist *L) //冒泡排序
{
for(i=0;iL-length;i++)
{
L-r[0]=L-r[1];
for(j=1;jN-i;j++)
if(L-r[0].key=L-r[j+1].key)
L-r[j](L-r[j+1]; //交换两记录的位置
else
L-r[0]=L-r[j+1]; //保证L-r[0]始终为较大的记录
L-r[j+1]=L-r[0]; //把最大的记录放到祠堂排序的最高位置
}
printf(L-r[MAXSIZE]);//输出排序后数组和相关数据
}
②直接插入排序 本算法的思路是,把L-r[0]设置为哨兵,排序时把第i个记录复制给哨兵,并于其前的i-1个记录进行比较,找到第一个比起大的记录,利用循环让记录后移,把其放到第一个比起大的记录前面。
void insertSort(Sqlist *L) //直接插入排序
{
for(i=2;i=L-length;i++)
{
if((L-r[i].key L-r[i-1].key))
{
L-r[0] = L-r[i]; //复制哨兵
L-r[i] = L-r[i-1];
for(j=i-2;(L-r[0].key L-r[j].key);j--)
L-r[j+1] = L-r[j]; //纪录后移
L-r[j+1] = L-r[0]; //插入到正确位置
}
}
pr
您可能关注的文档
- 《数据库课程设计报告-手机进销存管理系统》.doc
- 《数据库课程设计报告-考勤管理系统数据库设计》.doc
- 《数据库课程设计报告-汽车管理系统》.doc
- 《数据库课程设计报告-电力机车牵引力计算系统》.doc
- 《数据库课程设计报告_学籍管理系统》.doc
- 《数据库课程设计报告-超市进销存管理系统设计》.doc
- 《数据库课程设计报告-通用工资管理系统课程设计》.doc
- 《数据库课程设计报告-餐饮管理系统》.doc
- 《数据库课程设计报告图书销售数据库应用系统的设计与实现》.doc
- 《数据库课程设计报告某医院病房计算机系统》.doc
- 景德镇市焦化煤气总厂校园招聘模拟试题附带答案详解一套.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版汇编.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版审定版.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版必考题.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版参考答案.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版含答案.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版含答案.docx
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版最新.docx
- 冀教版二年级下册数学精品教学课件 第1单元 单元重难易错突破练 (2).ppt
- 景德镇市焦化煤气总厂校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版完整版.docx
最近下载
- 2024年广东省初中学业水平考试模拟地理试卷(一)课件.pptx VIP
- 广州洪德巷历史文化街区保护利用规划.pdf
- 广州市人民南历史文化街区保护利用规划(文本+图纸).pdf VIP
- 关于烹饪的策划书3.pptx
- WALL·E《机器人总动员(2008)》完整中英文对照剧本.pdf VIP
- LDT 99.13-2008 建设工程劳动定额市政工程-维修养护工程.docx
- 实验报告之spss频数分析.docx VIP
- 新教科版科学小学科学五年级下册全册教案(表格式,可打印).docx
- 2022年新改版教科版五年级上册科学全册教案教学设计(新整理版).doc
- 某小区高楼变频恒压供水系统设计.docx
文档评论(0)