版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验数学系 2012 级日期 2013.05.03No. PB12001117 评分实验题目:排序实验目的:采用顺序结构,编程实现直接排序、排序、冒泡排序、堆排,操作过程。序等排序算法,进一步理解各种排序的算法实验分析:该实验整体思路清晰,主要算法为表的创建、各排序算法、排序的选择及排序后的输出。实验采用顺序结构,用数组来带排序的,数组类型为关键字和其他信息组成的结构体。带排序的表的定义如下:类型定义及typedefKeyType;typedef struct RecTypeKeyType key;char otherinfo100;RecType;#define MAXSIZE 100 ty
2、pedef struct SqlistRecType RMAXSIZE;length;Sqlist;算法分析:(1)、带排序的输入及 Sqlist 的建立。注意到 Sqlist 需要先申请空间。用一个for 循环读入并。具体实现算法如下:void CreateSqlist(Sqlist *L,i;L-length=n;prf(请依次输入各 for(i=1;iRi.key),&(L-Ri.otherinfo);(2)、直接排序。将待排序的Ri,到已排好序的表R1, R2 ,., Ri-1 中,得到一个新的、数增加 1 的有序表。 直到所有的都完为止。序列分设待排序的顺序存放在数组 R1n中,在排
3、序的某一时刻,将成两部分:R1i-1:已排好序的有序部分;Rin:未排好序的无序部分。具体实现算法如下:void StraightInsertSort(Sqlist *L)i,j;for(i=2;ilength;i+) L-R0=L-Ri;j=i-1;while(LT(L-R0.key,L-Rj.key) L-Rj+1=L-Rj;j-;L-Rj+1=L-R0;(3)、排序。先取一个正整数 d1(d1n)作为第一个增量,将全部 n 个分成d1 组,把所有相隔 d1 的放在一组中,即对于每个 k(k=1, 2, d1),Rk,Rd1+k, R2d1+k , 分在同一组中,在各组内进行直接排序。这样
4、一次分组和排序过程称为一趟排序;取新的增量d2d1,重复分组和排序操作;直至所取的增量 di=1 为止,即所有放进一个组中排序为止。排序算法中需要定义一个数组存放增量,对每个增量如下:一趟排序的算法。具体实现算法void SPass(Sqlist *L,j,k;d)for(j=d+1;jlength;j+)L-R0=L-Rj;k=j-d;while(k0 & LT(L-R0.key,L-Rk.key) L-Rk+d=L-Rk;k=k-d;L-Rk+d=L-R0;void SSort(Sqlist *L)m,t,dk10;prf(请输入增量序列长度:n); scanf(%d,&t);prf(请输
5、入增量序列:n); for(m=0;mt;m+)scanf(%d,&dkm); for(m=0;mt;m+)SPass(L,dkm);(4)、冒泡排序。首先将 R1与 R2的关键字进行比较,若为反序,则交换两个记录;然后比较 R2与 R3的关键字,依此类推,直到 Rn-1与 Rn的关键字比较后为止,称为一趟冒泡排序。然后进行第二趟冒泡排序,对前n-1 个进行同样的操作。具体实现算法如下:void BubbleSort(Sqlist *L) j,k;for(j=0;jlength-1;j+) for(k=1;klength-j-1;k+)if(LT(L-Rk+1.key,L-Rk.key) L-
6、R0=L-Rk;L-Rk=L-Rk+1;L-Rk+1=L-R0;(5)、快速排序。通过一趟排序,将待排序分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,再用递归算法分别对这两部分进行下一趟排序,以达到整个序列有序。一趟快速排序的方法:从序列的两端交替扫描各个,将关键字小于基准关键字的依次放置到序列的前边;而将关键字大于基准关键字的从序列的最后端起,依次放置到序列的后边,直到扫描完所有的。设置指针 low,high,初值为第 1 个和最后一个的位置。设两个变量 i,j,初始时令 i=low,j=high,以 Rlow.key 作为基准(将 Rlow保存在R0中) 。从 j 所指位置
7、向前搜索:将 R0.key 与Rj.key 进行比较:若 R0.keyRj.key :令 j=j-1,然后继续进行比较, 直到i=j 或R0.keyRj.key 为止;若 R0.keyRj.key :Rj Ri,腾空 Rj的位置, 且令i=i+1;从 i 所指位置起向后搜索:将 R0.key 与 Ri.key 进行比较:若 R0.keyRi.key :令 i=i+1,然后继续进行比较, 直到 i=j 或 R0.keyRi.key 为止;若 R0.keyR0=L-Ri;dolow,high)while(LQ(L-R0.key,L-Rj.key)&(ji)j-;if(ji)L-Ri=L-Rj;i+
8、;while(LQ(L-Ri.key,L-R0.key)&(ji) i+;if(ji)L-Rj=L-Ri;j-;while(i!=j);L-Ri=L-R0;return(i);void QuickSort(Sqlist *L,k; if(lowR0=L-Rs;for(k=2*s;k=m;k=2*k)m)if(kRk.key,L-Rk+1.key)k+;if(LT(L-R0.key,L-Rk.key) L-Rs=L-Rk;s=k;else break;L-Rs=L-R0;void HeapSort(Sqlist *L)j;for(j=L-length/2;j0;j-)HeapAdjust(L,j
9、,L-length); for(j=L-length;j1;j-)L-R0=L-R1;L-R1=L-Rj;L-Rj=L-R0;HeapAdjust(L,1,j-1);(7)、菜单建立。调用 switch 函数实现。源程序:#include#include #define MAXSIZE 100 #define LT(a,b) (a)(b)#define LQ(a,b) (a)length=n;prf(请依次输入各 for(i=1;iRi.key),&(L-Ri.otherinfo);void StraightInsertSort(Sqlist *L) i,j;for(i=2;ilength;i
10、+) L-R0=L-Ri;j=i-1;while(LT(L-R0.key,L-Rj.key) L-Rj+1=L-Rj;j-;L-Rj+1=L-R0;void SPass(Sqlist *L,j,k;d)for(j=d+1;jlength;j+)L-R0=L-Rj;k=j-d;while(k0 & LT(L-R0.key,L-Rk.key) L-Rk+d=L-Rk;k=k-d;L-Rk+d=L-R0;void SSort(Sqlist *L)m,t,dk10;prf(请输入增量序列长度:n); scanf(%d,&t);prf(请输入增量序列:n); for(m=0;mt;m+)scanf(%d
11、,&dkm); for(m=0;mt;m+)SPass(L,dkm);void BubbleSort(Sqlist *L) j,k;for(j=0;jlength-1;j+) for(k=1;klength-j-1;k+)if(LT(L-Rk+1.key,L-Rk.key) L-R0=L-Rk;L-Rk=L-Rk+1;L-Rk+1=L-R0;QuickOnePass(Sqlist *L,i=low,j=high; L-R0=L-Ri;dolow,high)while(LQ(L-R0.key,L-Rj.key)&(ji)j-;if(ji)L-Ri=L-Rj;i+;while(LQ(L-Ri.ke
12、y,L-R0.key)&(ji) i+;if(ji)L-Rj=L-Ri;j-;while(i!=j);L-Ri=L-R0;return(i);void QuickSort(Sqlist *L,k; if(lowR0=L-Rs;for(k=2*s;k=m;k=2*k)m)if(kRk.key,L-Rk+1.key)k+;if(LT(L-R0.key,L-Rk.key) L-Rs=L-Rk;s=k;else break;L-Rs=L-R0;void HeapSort(Sqlist *L)j;for(j=L-length/2;j0;j-)HeapAdjust(L,j,L-length); for(j
13、=L-length;j1;j-)L-R0=L-R1;L-R1=L-Rj;L-Rj=L-R0;HeapAdjust(L,1,j-1);void main()Sqlist *L; i,j,n;L=(Sqlist *)malloc(sizeof(Sqlist);prf(请输入 scanf(%d,&n); CreateSqlist(L,n);长度:n);prf(-菜单n);prf(1直接排序n);prf(2-排序n);prf(3冒泡排序n);prf(4快速排序n);prf(5堆排序n);prf(请选择:n);scanf(%d,&i); switch(i)case 1:StraightInsertSort(L);break;case 2:SSort(L);break;case 3:case 4:case 5:BubbleSort(L);break;QuickSort(L,1,n);break; HeapSort(L);break;for(j=1;jRj.key,L-Rj.otherinfo); free(L);运行结果:调试分析与体会:1、 开始时建立表的算法无法完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年崖州湾国家实验室科研助理(劳务派遣)招聘备考题库及答案详解参考
- 制造业绿色制造与能源管理体系构建研究教学研究课题报告
- 2025年文元育英中学招聘6人备考题库参考答案详解
- 《新型冠状病毒肺炎康复者心理康复干预中的心理干预措施研究》教学研究课题报告
- 中国雄安集团2026年度校园招聘备考题库有答案详解
- 河源市第一小学2025年公开招聘临聘教师备考题库附答案详解
- 2025年广州市南沙区联合中国教科院公开招聘事业编制小学校长备考题库及一套答案详解
- 高中生借助历史GIS技术探究古代丝绸之路科技传播路径课题报告教学研究课题报告
- 2025年贵州铝业集团高校毕业生招聘备考题库(一)及1套完整答案详解
- 2025年晋江公开招聘28名政府专职消防员28人备考题库附答案详解
- 2025天津大学管理岗位集中招聘15人备考考试题库及答案解析
- 2025湖南工程机械行业市场现状供需调研及行业投资评估规划研究报告
- 工务劳动安全课件
- 鲁东大学《马克思主义基本原理II》2024-2025学年期末试卷(A卷)
- 三年级数学(上)计算题专项练习附答案集锦
- QB/T 2660-2024 化妆水(正式版)
- DCS集散控制系统课件
- 艾滋病的血常规报告单
- JJG 443-2023燃油加油机(试行)
- 国家开放大学-传感器与测试技术实验报告(实验成绩)
- 机动车驾驶员体检表
评论
0/150
提交评论