版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
验证性实验10:排序子系统班级:H1001学号:09姓名:陆俊实验日期:2023.12.71.实验目的〔1〕掌握常用排序方法的根本思想。〔2〕通过实验加深理解各种排序算法。〔3〕通过实验掌握各种排序方法的时间复杂度分析。〔4〕了解各种排序方法的优缺点及适用范围。2.实验内容〔1〕编写直接插入排序程序。〔2〕编写希尔排序程序。〔3〕编写冒泡排序程序。〔4〕编写快速排序程序。〔5〕编写选择排序程序。〔6〕编写归并排序程序。〔7〕编写堆排序程序。〔8〕程序执行时,要求能显示每一趟的排序结果。〔9〕设计一个选择式菜单,以菜单方式选择上述排序程序。排序子系统 *************************************************** *1------------更新排序数据* *2------------直接插入排序* *3------------希尔排序* *4------------冒泡排序* *5------------快速排序* *6------------选择排序* *7------------归并排序* *8------------堆排序* *0------------返回* ***************************************************请选择菜单号〔0--8〕:3.实验程序#include<stdio.h>#include<stdlib.h>#include<math.h>#defineL8#defineFALSE0#defineTURE1typedefstruct{ intkey; charotherinfo;}RecType;typedefRecTypeSeqlist[L+1];intnum;SeqlistR;voidInsertsort();voidBubblesort();voidQuickSort(intlow,inthigh);voidShellsort();voidSelectsort();voidMergesort();intPartition(inti,intj);voidHeap();voidmain(){ SeqlistS; inti,k; charch1,ch2,q; printf("\n\t请输入%d个待排序数据〔按【Enter】键分隔〕:\n\t",L); for(i=1;i<=L;i++) { scanf("%d",&S[i].key); getchar(); printf("\t"); } printf("\n\t排序数据已经输入完毕!"); ch1='y'; while(ch1=='y'||ch1=='Y') { printf("\n"); printf("\n\t\t排序子系统"); printf("\n\t\t***************************************************"); printf("\n\t\t*1------------更新排序数据*"); printf("\n\t\t*2------------直接插入排序*"); printf("\n\t\t*3------------希尔排序*"); printf("\n\t\t*4------------冒泡排序*"); printf("\n\t\t*5------------快速排序*"); printf("\n\t\t*6------------选择排序*"); printf("\n\t\t*7------------归并排序*"); printf("\n\t\t*8------------堆排序*"); printf("\n\t\t*0------------返回*"); printf("\n\t\t***************************************************"); printf("\n\t\t请选择菜单号〔0--8〕:"); scanf("%c",&ch2); getchar(); for(i=1;i<=L;i++) R[i].key=S[i].key; switch(ch2) { case'1': printf("\n\t请输入%d个待排序数据〔按【Enter】键分隔〕:\n\t",L); for(i=1;i<=L;i++) { scanf("%d",&S[i].key); getchar(); printf("\t"); } printf("\n\t排序数据已经输入完毕!"); break; case'2':Insertsort();break; case'3':Shellsort();break; case'4':Bubblesort();break; case'5':printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); num=0; QuickSort(1,L); printf("\n\t排序的最终结果是:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); printf("\n");break; case'6':Selectsort();break; case'7':Mergesort();break; case'8':Heap();break; case'0':ch1='n';break; default:printf("\n\t输入出错!"); } if(ch2!='0') { if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8') printf("\n\t排序输出完毕!"); printf("\n\n\t按回车键返回。"); q=getchar(); if(q!='\xA') { getchar(); ch1='n'; } } }}voidInsertsort(){ inti,j,k,m=0; printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=2;i<=L;i++) { if(R[i].key<R[i-1].key) { R[0]=R[i];j=i-1; while(R[0].key<R[j].key) { R[j+1]=R[j]; j--; } R[j+1]=R[0]; } m++; printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最终结果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidShellsort(){ inti,j,gap,x,m=0,k; printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); gap=L/2; while(gap>0) { for(i=gap+1;i<=L;i++) { j=i-gap; while(j>0) { if(R[j].key>R[j+gap].key) { x=R[j].key;R[j].key=R[j+gap].key; R[j+gap].key=x; j=j-gap; } else j=0; } } gap=gap/2; m++; printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最终结果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidBubblesort(){ inti,j,k; intexchange; printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=1;i<=L;i++) { exchange=FALSE; for(j=L;j>=i+1;j--) if(R[j].key<R[j-1].key) { R[0].key=R[j].key; R[j].key=R[j-1].key; R[j-1].key=R[0].key; exchange=TURE; } if(exchange) { printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",i); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } } printf("\n\t排序的最终结果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}intPartition(inti,intj){ RecTypepirot=R[i]; while(i<j) { while(i<j&&R[j].key>=pirot.key) j--; if(i<j) R[i++]=R[j]; while(i<j&&R[j].key<=pirot.key) i++; if(i<j) R[j--]=R[i]; } R[i]=pirot; returni;}voidQuickSort(intlow,inthigh){ intpirotpos,k; if(low<high) { pirotpos=Partition(low,high); num++; printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",num); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); QuickSort(low,pirotpos-1); QuickSort(pirotpos+1,high); }}voidSelectsort(){ inti,j,k,h; printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=1;i<=L;i++) { h=i; for(j=i+1;j<=L;j++) if(R[j].key<R[h].key) h=j; if(h!=j) { R[0]=R[i]; R[i]=R[h]; R[h]=R[0]; } printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",i); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最终结果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidMerge(intlow,intmm,inthigh){ inti=low,j=mm+1,p=0; RecType*R1; R1=newRecType[high-low+1]; if(!R1) printf("\n\t内存容量不够!"); while(i<mm&&j<=high) R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++]; while(i<=mm) R1[p++]=R[i++]; while(i<=high) R1[p++]=R[j++]; for(p=0,i=low;i<=high;p++,i++) R[i]=R1[p];}voidMergePass(intlength){ inti; for(i=1;i+2*length-1<=L;i=i+2*length) Merge(i,i+length-1,i+2*length-1); if(i+length-1<L) Merge(i,i+length-1,L);}voidMergesort(){ intlength,k,m=0; printf("\n\t原始数据为〔按【Enter】键开始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(length=1;length<L;length*=2) { MergePass(length); m++; printf("\t第%d趟排序结果为〔按【Enter】键继续〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最终结果是:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); printf("\n");}voidCreateHeap(introot,intindex){ intj,temp,finish; j=2*root; temp=R[root].key; finish=0; while(j<=index&&finish==0) { if(j<index) if(R[j].key<R[j+1].key) j++; if(temp>=R[j].key) finish=1; else { R[j/2].key=R[j].key; j=j*2; } } R[j/2].key=temp;}voidHeapSort(){ inti,j,temp,k; for(i=(L/2);i>=1;i--) CreateHeap(i,L); for(i=L-1,k=1;i>=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024体育场馆排水施工合同
- 2024年度设备维护保养吊装合同
- 2024光通信网络设备供应与安装合同
- 2024年度某航空公司与某机场管理公司关于某国际航线机场服务合作的合同
- 2024年度0kv线路工程保险服务合同
- 2024工业园区环境清洁承包合同
- 2024互联网金融服务平台搭建与运营合同
- 小黄牛养殖风险管理方案
- 2024年度环保设备安装与调试服务合同
- 心理健康讲座直播方案
- 儿童早期的认知发展-皮亚杰前运算阶段(三座山实验)
- 国开一体化平台01588《西方行政学说》章节自测(1-23)试题及答案
- 2024年极兔速递有限公司招聘笔试参考题库附带答案详解
- 2024年威士忌酒相关公司行业营销方案
- 网络游戏危害课件
- 2024供电营业规则学习课件
- 铁路给水排水设计规范(TB 10010-2016)
- GINA2023-哮喘防治指南解读-课件
- 2024年上海市第二十七届初中物理竞赛初赛试题及答案
- 寝室设计方案方法与措施
- 收费站冬季安全注意事项
评论
0/150
提交评论