




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验6 排序算法实现实验本实验为验证和操作实验 ,需要4学时 。 1. 实验目的熟悉几种典型的排序方法(插入,选择,快速,希尔排序),并对各种算法的特点、使用范围和效率有进一步的了解。 2. 实验内容用C+描述并实现以上几种典型排序主要查找算法及其主要操作,其逻辑结构。完成如下程序: #include using namespace std;typedef int KeyType; / 关键字的类型const int MAXSIZE=100; / 数组的容量/-struct ElemType /学生的记录信息 KeyType key ; /学号 char name10; /姓名 int english; /成绩 int math; /成绩;/-class SqHash public: ElemType *ht,*z; /表数组 int length; int couts; /表大小(长度) /KeyType p; / 除留余数法的大质数public: SqHash( int n1,int p1); SqHash() delete ht; length=0; ; void creat_hash(); /int find( KeyType k ); int sort1(); /void creat_hash(); void PrintOut();/-SqHash:SqHash(int n1,int p1) int p; length=n1; p=p1; ht=new ElemTypelength; for(int i=0;ilength;i+) hti.key=-1;/-void SqHash:creat_hash() int i,K,en,ma; i=0; char na10; coutK; couts=0; while(K!=-1&ilength) /coutnaenma; hti.key=K; /strcpy(,na); /用串拷贝赋值 /hti.english=en; /hti.math=ma; /插入学生记录K coutn 插入成功! ; i+; couts+; coutK;/-/查询某关键字的记录int SqHash: sort1() int i,j,k=1;int ll1; /元素从1开始存储,couts表示数组中含有元素个数,此处即为最后一个元素的下标for(i=2;i=couts;i+)if(hti.keyhti-1.key) ll1=ht0.key;ht0=hti; /设置监视哨 for(k;k=1;k+2)ht0.key=ll1;for(j=i-1;ht0.keyhtj.key;j-)htj+1.key=htj.key;htj+1.key=ht0.key; if(i!=0) return 1; else return 0;/-void SqHash:PrintOut() int i,j; for (i=0;icouts+10; i+) if(hti.key!=-1) coutn i=i 学号:hti.key; / 姓名: / 英语成绩:hti.english 高数成绩:hti.math; /-int main() int p0,n0; coutn0; coutp0; SqHash ha(n0,p0); ElemType a; int k; do coutnnn; coutn 1. 建立表 ; coutn 2. 对学生记录排序; coutn 3. 输出表; coutn 4. 结束; coutn=; coutk; switch(k) case 1: ha.creat_hash(); break; case 2: coutn 排序学生数据:; int i=ha.sort1(); if(i=-1) coutn排序不成功endl ; elsecout=1&k=3); return 0;3. 实验结果1.运行与建表2. 输出表(排序前)3. 排序4. 输出表(排序后)5. 结束4. 实验总结Shell排序(ShellSort)Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth的分组方法。Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。Shell排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成:(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门面转租合同协议样本
- 高校岗位聘任合同范本
- 沿街库房出租合同范本
- 给超市供物料合同范本
- 软件技术买卖协议合同
- 服装独家直播合同范本
- 采购急救设备合同范本
- 黄牛养殖合同合作协议
- 砖厂合伙投资合同范本
- 采集松脂出租合同范本
- 《中国近现代史纲要》 课件 第十一章 中国特色社会主义进入新时代
- 《最优化方法》研究生配套教学课件
- EN61238-1额定电压36kV电力电缆用压接和机械连接器 试验方法和要求
- 专利法全套ppt课件(完整版)
- 自动插件机操作指导书
- 2020年全球森林资源评估
- 培智三年级上册生活数学全册教案
- 高考作文卷面书写
- 三效并流蒸发器的换热面积计算
- 船舶驾驶台资源管理bridge team management
- 心律失常介入培训教材课后练习及答案
评论
0/150
提交评论