ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:70.78KB ,
资源ID:10252211      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10252211.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(插入排序的设计与实现.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

插入排序的设计与实现.docx

1、插入排序的设计与实现题 目: 插入排序的设计与实现初始条件:理论:学习了数据结构课程,掌握了基本的数据结构和常用的算法;实践:计算机技术系实验室提供计算机及软件开发环境。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1系统应具备的功能:(1)从键盘上输入五个学生的考研成绩;(2)实现直接插入排序、二分插入排序、对各科成绩,以及平均成绩从小到大排序;(3)比较各种插入排序的优劣。2数据结构设计;3主要算法设计;4编程及上机实现;5撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、

2、结果分析、设计体会等;(4)结束语;(5)参考文献。时间安排: 2007年7月2日7日 (第18周)7月2日 查阅资料7月3日 系统设计,数据结构设计,算法设计7月4日-5日 编程并上机调试7月6日 撰写报告7月7日 验收程序,提交设计报告书。指导教师签名: 2007年7月2 日系主任(或责任教师)签名: 2007年7月2 日 插入排序的设计与实现摘要:近几年以来,考研的人数越来越多,有n个人的成绩出来了,想大致了解一下学生的水平,对于出来的成绩进行排序,分别对数学、外语、政治、专业的成绩进行从小到大的排序,以及他们的平均成绩进行排序。并以五个人为例,用插入排序实现,其中,成绩由外部输入。关键

3、字:排序,输入,插入0.引言 我所写的程序是用的直接插入和折半排序,对所输入的成绩进行排序,共有四门成绩,一共有五个人,然后对平均成绩和各门成绩进行排序,按非递增的顺序输出。1.需求分析近几年以来,考研的人数越来越多,有n个人的成绩出来了,想大致了解一下学生的水平,不可能通过人工的去对学生的成绩进行排序。对于出来的成绩进行排序,分别对数学,外语,政治,专业的成绩进行从小到大的排序,以及他们的平均成绩进行排序。数据的外部输入, 数据的任意性,以及只需大概的了解数据的一些特性。2.数据结构设计 以下是三个存储结构,各自特点如下: /*建一 个结构体*/ Struct student float m

4、at; /*存放数学成绩 */ float eng; /*存放英语成绩 */ float pol; /*存放政治成绩 */ float pro; /*存放专业成绩 */ ; struct Student student5; /*建立一个结构体类型的数组,用来存放输入的信息*/ 纪录类型结构:typedef struct RecordType int key; char data ;RecordType;#define MAXSIZE N顺序表结构:typedef struct SqList RecordType rMAXSIZE + 1; int length;SqList;在设计的过程中,根

5、据插入排序的特点,我认为第一个存储结构的效率更有效,记录类型是一样的,都是用数组存放。3.算法设计 3.1 直接插入排序算法 void Insert(float r,int n) /*建立直接插入排序算法*/ int i,j; n=n-1; for(i=2;i=n;+i) if(riri-1) /需将r插入到有序子表 r0=ri; /复制为哨兵 ri=ri-1; for(j=i-2;r0rj;-j) rj+1=rj; /记录后移 rj+1=r0; /插入到正确的位置 3.2 二分查找排序算法 Void BInsert (Aqlist &L) / 对顺序表L作二分插入排序For(i=2;i=L.

6、length;+i) L.r0=L.ri; /将L.rn暂存到L.r0Low=1;high=i-1;While(low=high+1;-j) L.rj+1=L.rj; /记录后移L.rhigh+1=L.r0; /插入/for/BInsertSort折半插入排序所需要附加存储空间和 直接插入排序相同,从时间上比较,折半插入排序仅减少了关键字间的比较次数,而记录的移动次数不变.因此,插入排序的时间复杂度仍为O(n2).直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的,记录数增1的有序表。 例如,

7、已知待排序的一组记录的初始排列如下所示: R(38),R(49),R965,R(97),R(76),R(13),R(27),R(49)(10-4) 假设在排序的过程中,前四个记录已按关键字递增的次序重新排列,构成一个含四个记录的有序序列 R(38),R(49),R(65),R(97) (10-5)现要将式(10-4)中第五个(即关键字为76的)记录插入上述序列以得到一个新的含五个记录的有序序列,则首先要在式(10-5)的序列中进行查找以确定R(76)所应插入的位置,然后进行插入。假设从R(97)起向左进行顺序查找,由于657697,则R(76)应插入在R(65)和R(97)之间,从而得到下列新

8、的有序序列R(38),R(49),R(65),R(76),R(97) (10-6)称从式(10-5)到式(10-6)的过程为一趟直接插入排序。一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r1.i-1;并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r0处设置监视哨。在自i-1起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2 个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 从上面的叙述可见,直接插入排序的算法简洁,容易实现,那么它的效率如何呢?从空间

9、来看,它只需要一个记录的辅助空间,从时间来看,排序的基本操作为:比较两个关键字的大小和移动记录。先分析一趟插入排序的情况。算法中里层的for循环的次数取决于待插记录的关键字与前i-1个记录的关键字之间的关系。若L.ri.keyL.r1.key,则内循环中,待插记录的关键字需与有序子序列L.r1i-1中i-1个记录的关键字和监视哨中的关键字进行比较 ,并将L.r1.i-1中i-1个记录后移。则在整个排序过程(进行n-1趟插入排序)中,当待排序序列中记录按关键字非递减有序排列(以下称之为“正序”)时,所需要进行关键字比较的次数达最小值n-1,记录不需移动;反之,当待排序列中记录按关键字非递增有序排

10、列时,总的比较次数达最大植(n+2)(n-1J)/2,记录移动的次数也达最大植(n+4)(n-1)/2.若待排序记录是随机的,即待排序列中的记录可能出现的各种排列的概率相同,则我们可取上述最小值和最大值的平均值,作为直接插入排序的所需进行关键字间的比较次数和移动记录的次数,约为n2/4.由此,直接插入排序的时间复杂度为0(n2).在下面我所编的程序中,我用的是直接插入排序和二分插入排序4.程序实现4.1 程序源代码#include stdio.h#include string.h void BInsert(float r,int n ) int low,high; int i,j,m; n=n

11、-1; /* 对数组作二分插入排序*/for(i=2;i=n;+i) r0=ri; /*将rn暂存到r0 */low=1;high=i-1;while(low=high) /*在rlow.high中折半查找有序插入的位置*/ m=(low+high)/2; /*折半*/if(r0=high+1;-j) rj+1=rj; /*记录后移*/ rhigh+1=r0; /*插入*/ void Insert(float r,int n) /*建立直接插入排序算法*/int i,j; n=n-1; for(i=2;i=n;+i) if(riri-1) r0=ri; ri=ri-1; for(j=i-2;r

12、0rj;-j) rj+1=rj; rj+1=r0; int main() /*建立主函数*/ void BInsert(float r,int n ); void Insert(float r,int n); struct Student /*建立一个结构体类型*/ float mat; float eng; float pol; float pro; ; struct Student student5; int a1; int i,t; float a6,b6,c6,d6; float aver6; printf(Input 五个学生的数学成绩,以逗号隔开,0到100之间:n); /*输入五

13、个学生的考研数学成绩*/ scanf(%f,%f,%f,%f,%f,&student0.mat, &student1.mat, &student2.mat,&student3.mat,&student4.mat); for(a1=1;a1=5;a1+) aa1=studenta1-1.mat; for(i=1;i=5;i+) if( ai100) return 0; printf(Input 五个学生的英语成绩:n); scanf(%f,%f,%f,%f,%f,&student0.eng, &student1.eng, &student2.eng,&student3.eng,&student4

14、.eng); for(a1=1;a1=5;a1+) ba1=studenta1-1.eng; for(i=1;i=5;i+) if( bi100) return 0; printf(Input 五个学生的政治成绩 :n); scanf(%f,%f,%f,%f,%f,&student0.pol, &student1.pol, &student2.pol,&student3.pol,&student4.pol); for(a1=1;a1=5;a1+) ca1=studenta1-1.pol; for(i=1;i=5;i+) if( ci100) return 0; printf(Input 五个学

15、生的专业成绩:n); scanf(%f,%f,%f,%f,%f,&student0.pro, &student1.pro, &student2.pro,&student3.pro,&student4.pro); for(a1=1;a1=5;a1+) da1=studenta1-1.pro; for(i=1;i=5;i+) if( di100) return 0; for(i=1;i=1;t-) /*逆顺序输出,得到从小到大的顺序*/ printf(%3.2f ,at); printf(n); printf(output排序后的英语成绩:n); for(t=5;t=1;t-) printf(%3

16、.2f ,bt); printf(n); printf(output 排序后的政治成绩:n); for(t=5;t=1;t-) printf(%3.2f ,ct); printf(n); printf(output 排序后的专业成绩:n); for(t=5;t=1;t-) printf(%3.2f ,dt); printf(n); printf(output 排序后的平均成绩:n); for(t=5;t=1;t-) printf(%3.2f ,avert);4.2 程序运行主界面 5.设计体会 作为一个计算机专业的学生,编程是我们的基本能力,但是,通过这次的实践,发现自己的编程能力的确是太差劲

17、了,一些语法的错误,犯的很多,对程序的改进和分析的能力也较差,很多错误都是同学帮忙,才被解决了的。不过,同过这次的设计,了解到,算法在整个程序中的重要性,好的算法,能够节省很多的时间,为计算机节省空间,再次,我通过各种途径,把以前学过的语言,复习了一遍,对它们有了进一步的了解。通过网上查询,找到了一些很好的程序,发现编的的确是很有水平。以后可以借鉴,编程不是一朝一夕的事情,需要我们多多的练习。6. 结束语 通过这次的课程设计,对课程上的一些 算法有了进一步的了解,由于水平有限,有些要求完成的不是很理想,但是一些算法却是用上去了。参考文献1 严蔚敏 ,吴伟名.数据结构, 清华大学出版社, 2001年 7月2 谭浩强 .,清华大学出版社, 2004年6月3 谭浩强 .,清华大学出版社, 1999年12月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1