- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验4排序
实验4 排序
1实验目的
掌握各种排序方法的基本思想、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。
2实验内容
实现直接插入排序、冒泡、直接选择、快速排序算法。比较各种算法的运行速度。
【测试数据】自定
3实验结果
按照学校实验格式要求撰写实验报告,内容主要包括1)实验目的;2)实验内容;3)实验环境和方法;4)实验过程描述;5)实验心得体会
4 程序示例
#includestdio.h
#includestdlib.h
#define Max 100 //假设文件长度
typedef struct{ //定义记录类型
int key; //关键字项
}RecType;
typedef RecType SeqList[Max+1]; //SeqList为顺序表,表中第0个元素作为哨兵
int n; //顺序表实际的长度
直接插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已排序好的子文件中的适当位置,直到全部记录插入完成为止。
//==========直接插入排序法======
void InsertSort(SeqList R)
{ //对顺序表R中的记录R[1‥n]按递增序进行插入排序
int i,j;
for(i=2;i=n;i++) //依次插入R[2],……,R[n]
if(R[i].keyR[i-1].key){ //若R[i].key大于等于有序区中所有的keys,则R[i]留在原位
R[0]=R[i];j=i-1; //R[0]是R[i]的副本
do { //从右向左在有序区R[1‥i-1]中查找R[i] 的位置
R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
j--;
}while(R[0].keyR[j].key); //当R[i].key≥R[j].key 是终止
R[j+1]=R[0]; //R[i]插入到正确的位置上
}//endif
}
冒泡排序的基本思想:设想被排序的记录数组R[1‥n]垂直排序。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上“漂浮”(交换),如此反复进行,直到最后任意两个气泡都是轻者在上,重者在下为止。
//==========冒泡排序=======
typedef enum{FALSE,TRUE} Boolean; //FALSE为0,TRUE为1
void BubbleSort(SeqList R)
{ //自下向上扫描对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;in;i++) { //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j=i;j--) //对当前无序区R[i‥n] 自下向上扫描
if(R[j+1].keyR[j].key){ //两两比较,满足条件交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(! exchange) //本趟排序未发生交换,提前终止算法
return;
}// endfor(为循环)
}
快速排序的基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录作为支点(又称基准记录)(pivot),将所有关键字比它小的记录放置在它的位置之前,将所有关键字比它大的记录放置在它的位置之后(称之为一次划分过程)。之后对所分的两部分分别重复上述过程,直到每部分只有一个记录为止。
//1.========一次划分函数=====
int Partition(SeqList R,int i,int j)
{ // 对R[i‥j]做一次划分,并返回基准记录的位置
RecType pivot=R[i]; //用第一个记录作为基准
while(ij) { //从区间两端交替向中间扫描,直到i=
您可能关注的文档
- 外国文学简史复习资料全.docx
- 外国文学郑克鲁上.docx
- 多媒体最终.doc
- 多层住宅设计任务书指导书.doc
- 夜发清溪向三峡.doc
- 复习工业微生物.docx
- 大学专业分类大全.doc
- 多线程端口程序设计与实现.docx
- 大学生数学建模论文人民币汇率对经济的影响.doc
- 大学生计算机基础习题2.doc
- 中华人民共和国刑法知识培训.pptx
- 项目采购监控合同范本.docx
- 并购财务风险视角下阿里巴巴并购饿了么案例分析16000字.pdf
- (6篇)2024年秋国开《形势与政策》大作业题:中华民族现代文明有哪些鲜明特质?建设中华民族现代文明的路径是什么?范文 .pdf
- (5篇)2024年秋大作业:中华民族现代文明有哪些鲜明特质,建设中华民族现代文明的路径是什么?附答案(精选) .pdf
- 2024年黑龙江卷地理高考试卷(原卷+答案) .pdf
- 互联网信贷对大学生消费的影响分析6900字.pdf
- 上海市青浦区2025届高考化学必刷试卷含解析.doc
- 安徽省宿州市褚兰中学2025届高三第五次模拟考试历史试卷含解析.doc
- 《建筑与市政工程施工现场临时用电安全技术标准》JGJT46-2024知识培训.pptx
文档评论(0)