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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于C语言的多种排序方式的实现.docx

1、基于C语言的多种排序方式的实现基于C语言的多种排序方式的实现1 引 言 课题背景排序问题源远流长,一直是数学地重要组成部份。随着各类信息的快速更新,排序问题也走进了其他领域和咱们地日常生活。如何高效地排序一直困扰着咱们。 课程设计目的排序是数学的重要组成部份,工作量大是其存在的问题。如何高效地排序?本程序确实是解决那个问题而设计。程序中,把数列贮存在数组中,采纳插入排序等十种排序方式对数组元素进行排序,高效地解决了排序问题。本软件开发的平台为最新的微软公司出版的市面最新系统Windows 2000,而且能够作为自身的运行平台超级普遍,包括 Windows 98/2000/XP/Vista等等。

2、课程设计内容本程序把对数列的排序转化为对数组元素的排序,用户能够依照自己的实际问题选择系统提供的七种排序方式的任意一种进行排序。程序通过自身的判定和处置实现排序。程序最后输出每趟排序及初始排序结果。 2 系统分析与设计方案 系统分析 设计一个排序信息治理系统,使之能够操作实现以下功能:1) 显示需要输入的排序长度及其各个关键字2) 初始化输入的排序序列3) 显示可供选择的操作菜单4) 显示输出操作后的移动次数和比较次数5) 显示操作后的新序列5) 可实现循环继续操 设计思路通过概念C语言顺序表来存储排序元素信息,构造相关函数,对输入的元素进行相应的处置。 2 设计方案设计方案如下图图 设计方案

3、具体流程见图 图 程序流程图3功能设计 SqList顺序表其中包括顺序表长度,和顺序表。源代码如下:1typedef struct KeyType key; ey顺序地与前面记录的关键字ri-1.key,ri-2.key,,r1.key进行比较,把所有关键字大于ri.key的记录依次后移一名,直到关键字小于或等于ri.key的记录rj,直接将ri插入到rj后面,循环以上进程直到最后一个纪录也插入到合理的位置。整个排序进程是从第2个记录开始的,视第1个记录为已经排好序的集合。 冒泡排序 冒泡排序是对所有相邻的记录进行比较,假设这两个元素恰好与排序结果逆序,那么将这两个元素的位置进行互换。 进程描

4、述如以下图所示:图 冒泡排序第一趟的前三次比较图 冒泡排序的第一趟比较结果(1)、将整个的待排序序列的记录序列划分为有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。(2)、对无序区之前向后依次将相邻记录的数据进行比较,假设两结果的大小恰好与排序结果相反,那么将其互换,从而始数据值大的记录向右边移动。计较完无序区的最后两个记录,一趟冒泡排序终止。无序区最后一个记录进入有序区。(3)、重复步骤(2),直到无序区中只剩下一个记录。 快速排序快速排序是第一选择一个轴值,通过一趟排序将待排记录分割成独立的两部份,其中一部份记录的关键均小于等于轴值,另一部份记录的关键字均大于等于轴值,再别

5、离对这两部份继续进行排序,以达到整个序列有序。 进程描述路以下图所示:初始关键字序列 72 6 57 88 60 42 83 73 48 85 i j j 进行1次互换以后 48 6 57 88 60 42 83 73 85 i i j进行2次互换以后 48 6 57 60 42 83 73 88 85 I j j进行3次互换以后 48 6 57 42 60 83 73 48 85 I j j完成一趟排序 48 6 57 42 60 72 83 73 88 85图 一趟快速排序进程初始状态 72 6 57 88 60 42 83 73 48 85一次划分以后 48 6 57 42 60 72

6、83 73 48 85别离进行快速排序 42 6 48 57 60 6 42 终止 57 60 终止 73 83 88 85 终止 85 88 终止有序序列 6 42 48 57 60 72 73 83 85 88图 快速排序的完整进程 堆排序 (1)、用建堆算法成立原始堆;(2)、堆尾元素与堆顶元素互换;(3)、再次挪用建堆算法建堆;(4)、重复执行步骤(2)直到所有元素排好序。进程描述:假设,待排序的序列为:36 15 53 18 45 30 48 72 93第一步,成立原始堆结构 a、从第4个节点开始调整 b、对第3个节点进行调整 c、对第2个节点进行调整 d、持续向下挑选e、原始堆 图

7、 成立原始堆第二步,15与93互换位置后,从头调整为堆,18为堆顶元素 图 第二次调整图 第三次调整 折半插入排序因为 R1.i-1 是一个按关键字有序的有序序列,那么能够利用折半查找实现“在R1.i-1中查找Ri的插入位置”,如此实现的插入排序为折半插入排序。犹如直接插入排序,只是确信插入的位置时,选择折半查找的方式。7、简单项选择择排序假设排序进程中,待排记录序列的状态为: 图 待排序记录序列排序进程:第i简单项选择择排序,从无序序列当选择最小的一个元素,插入到有序序列当中去。4 运行结果 图 进行一趟简单项选择择排序后得序列4 技术难点与分析 将四个子程序串成一个整体 解决方式:通过编写

8、一个主程序 4void main() int i,k; char ch=y; SqList *l; l=(SqList *)malloc(sizeof(SqList ); while(ch=y) InsertSort(l,m,n); BubbleSort(l,1,l-length); 子程序挪用 QuickSort(l,1,l-length); HeapSort(l); printf(n是不是继续操作(y/n):); getchar(); ch=getchar(); 对四个子程序进行挪用,始之组成一个整体。 如何对四个子程序的比较和移动次数进行概念若是都采纳整体变量,那么在执行进程中会显现数据

9、累加现象,致使计算结果犯错,故在概念进程中部份采纳整体变量,部份采纳局部变量,以此来幸免产生冲突。整体变量执行一次以后的结果如下图:图 采纳整体变量执行一次 整体变量执行二次以后的结果如下图:显现数据累加现象图采纳整体变量执行二次整体和局部变量并用执行两次的结果如下图,无数据累加情形图 整体和局部变量并用执行两次5系统测试 系统主界面 图 系统主界面 直接插入排序测试图 直接插入排序测试 冒泡排序测试图 冒泡排序测试结果 快速选择排序测试图 快速选择排序测试结果 堆排序测试图 堆排序测试结果 折半插入排序图 折半插入排序测试结果 简单项选择择排序图 简单项选择择排序6 终止语 数据结构课程设计

10、和现代运算机技术的实际应用相结合,是咱们在本学期学完理论课程以后对自己学习能力的一次专门好的查验,从开始的算法思路到运行调试后的可执行程序,都是一个专门好的学习和锻炼的进程。既能够使咱们巩固了原有的理论知识,培育了咱们灵活运用和组合集成所学过知识及技术来分析、解决实际问题的能力,也能够使咱们体会到自身知识和能力能在实际中的应用和发挥。不但能够激发创新意识,还能够开发制造能力、培育沟通能力。这次数据结构课程设计的时刻里尽管时刻有限,但确实使我受益非浅。通过实践课程设计我丰硕了编译工具操作体会,加倍深了对C语言的了解,熟悉了其环境,更增强了对排序算法的明白得与运用。而且,在完本钱课程设计的进程中,

11、也充满考验了我的意志,锻炼了我的耐心、认真。在实践的进程中,需要不断的查阅资料,乃至需要求助于教师、同窗。在课程设计中要擅长试探,多动手。我深知,独立完成如此一项任务需要克服许多困难。总之,数据结构课程设计让我受益良多,我会好好珍爱像这种宝贵的机遇,尽力学习知识。也感激帮忙了我的教师、同窗。 参考文献1 严蔚敏,吴伟民,数据结构(C语言版).北京:清华大学出版社,1997 2 谭浩强,C程序设计(第三版).北京:清华大学出版社,20053 谭浩强,C语言程序设计题解与上机指导(第三版).北京:清华大学出版社,20054 Jeri ,Elliot B. Koffman,问题求解与程序设计C语言版

12、(第四版).北京:清华大学出版社,2007-15 何钦铭,颜晖,C语言设计教程.北京:高等教育出版社,2020年6 吴文虎,程序设计基础.北京:清华大学出版社,2003附 录 :系统源程序代码#include#include#include#define MaxSize 10 ey); printf(n);eyrj.key&+n) eyl-rj+1.key&+n) temp=l-rj; ey;ey) eyr0=l-rx ; for(j=2*x;j=y;j=j*2) if(jrj.keyrj+1.key) +j;eyl-rj.key) d+; break; l-rx=l-rj; c+; x=j;

13、 l-rx=l-r0; c+;.i建成初始堆 HeapAdjust(l,i,l-length); printf(初始序列建成堆:); print(l); for(j=l-length;j1;-j) .i进行堆排序,共做n-1趟 l-r0=l-rj; l-rj=l-r1; l-r1=l-r0; c=c+3; HeapAdjust(l,1,j-1); printf(第%d趟建堆结果为:,l-length-j+1); print(l); void BinSort (SqList *l, int length)/*对记录数组r进行折半插入排序,length为数组的长度*/ int i,j; RedTy

14、pe x; int low,high,mid; for ( i=2; i ri; low=1; high=i-1; while (low=high ) /* 确信插入位置*/ mid=(low+high) / 2; if ( rmid.key ) high=mid-1; else low=mid+1; for ( j=i-1 ; j= low; -j ) l-rj+1= l-rj; /* 记录依次向后移动 */ l-rlow=x; /* 插入记录 */ printf(第%d趟排序结果为:,i-1); print(l); /*BinSort*/void SelectSort(SqList *l,

15、 int length)/*对记录数组r做简单项选择择排序,length为数组的长度*/ int i,j,k; int n; RedType x; n=length; for ( i=1 ; i= n-1; +i) k=i; for ( j=i+1 ; jrj.key rk.key ) k=j; if ( k!=i) x= l-ri; l-ri= l-rk; l-rk=x; printf(第%d趟排序结果为:,i); print(l); /* SelectSort */ void main() int i,k; char ch=y; SqList *l; l=(SqList *)malloc(

16、sizeof(SqList ); while(ch=y) int m=0,n=0; 接插入排序 n); printf(tt 2.冒泡排序 n); printf(tt 3.快速排序 n); printf(tt 4.堆排序 n); printf(tt 5.折半插入排序 n); printf(tt 6.简单项选择择排序 n); printf(tt 7.退出系统 n); printf(tt欢迎利用排序治理系统n); printf(nnn); printf(请选择:); scanf(%d,&k); switch (k) case 1:printf(n您选择的是直接插入排序:n); printf(输入要排

17、序列表的长度n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i); scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); InsertSort(l,m,n); printf(直接插入排序跋文录为:); print(l); break; case 2:printf(n您选择的是冒泡排序:n); printf(输入要排序列表的长度n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i);

18、scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); BubbleSort(l,1,l-length); printf(冒泡排序跋文录为:); print(l); break; case 3:printf(n您选择的是快速排序:n); printf(输入要排序列表的长度n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i); scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); QuickSort(l,1,l-length)

19、; printf(快速排序的移动次数为:%d,比较次数为:%dn,a,b); printf(快速排序跋文录为:); print(l); break; case 4:printf(n您选择的是堆排序:n); printf(输入要排序列表的长度n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i); scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); HeapSort(l); printf(堆排序的移动次数为:%d,比较次数为:%dn,c,d); printf(堆排序跋

20、文录为:); print(l); break; case 5:printf(n您选择的是折半插入排序:n); printf(输入要排序列表的长度n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i); scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); BinSort (l,l-length); printf(快速排序跋文录为:); print(l); break; case 6:printf(n您选择的是简单项选择择排序:n); printf(输入要排序列表的长度

21、n:); scanf(%d,&l-length); for(i=1;ilength;i+) printf(输入第%d个记录的关键字:,i); scanf(%d,&l-ri.key); printf(初始输入序列为:); print(l); SelectSort(l, l-length); printf(快速排序跋文录为:); print(l); break; case 7:break;default:printf(没有找到你需要的排序方式); break;printf(n是不是继续操作(y/n):);getchar();ch=getchar(); 致 谢时刻飞逝,大学的学习生活专门快就要过去,

22、在这四年的学习生活中,收成了很多,而这些成绩的取得是和一直关切帮忙我的人分不开的。第一超级感激学校开设那个课题,为本人往后从事运算机方面的工作提供了体会,奠定了基础。本次毕业设计可能持续了半年,此刻终于到结尾了。本次毕业设计是对我大学四年学习下来最好的查验。通过这次毕业设计,我的能力有了专门大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都有专门大的进步。这期间凝聚了很多人的心血,在此我表示由衷的感激。没有他们的帮忙,我将无法顺利完成这次设计。第一,我要专门感激我的明白郭谦功教师对我的悉心指导,在我的论文书写及设计进程中给了我大量的帮忙和指导,为我理清了设计思路和操作

23、方式,并对我所做的课题提出了有效的改良方案。郭谦功教师渊博的知识、严谨的作风和诲人不倦的态度给我留下了深刻的印象。从他身上,我学到了许多能受益终生的东西。再次对周巍教师表示衷心的感激。第二,我要感激大学四年中所有的任课教师和辅导员在学习期间对我的严格要求,感激他们对我学习上和生活上的帮忙,使我了解了许多专业知识和为人的道理,能够在尔后的生活道路上有继续奋斗的力量。另外,我还要感激大学四年和我一路走过的同窗朋友对我的关切与支持,与他们一路学习、生活,让我在大学期间生活的很充实,给我留下了很多难忘的回忆。最后,我要感激我的父母对我的关系和明白得,若是没有他们在我的学习生涯中的无私奉献和默默支持,我

24、将无法顺利完成今天的学业。致 谢四年的大学生活就快走入尾声,咱们的校园生活就要划上句号,心中是无尽的难舍与爱恋。从那个地址走出,对我的人一辈子来讲,将是踏上一个新的征程,要把所学的知识应用到实际工作中去。回顾四年,取得了些许成绩,生活中有欢乐也有艰辛。感激教师四年来对我孜孜不倦的教诲,对我成长的关切和爱惜。学友谊深,情同兄妹。四年的风风雨雨,咱们一同走过,充满着关爱,给我留下了值得收藏的最美好的经历。在我的十几年求学历程里,离不开父母的鼓舞和支持,是他们辛勤的劳作,无私的付出,为我制造良好的学习条件,我才能顺利完成完成学业,感激他们一直以来对我的抚育与培育。最后,我要专门感激我的导师刘望蜀教师、和研究生助教吴子仪教师。是他们在我毕业的最后关头给了咱们庞大的帮忙与鼓舞,给了我很多解决问题的思路,在此表示衷心的感激。教师们认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他不管在理论上仍是在实践中,都给与我专门大的帮忙,使我取得很多的提高这关于我以后的工作和学习都有一种庞大的帮忙,感激他耐心的辅导。在论文的撰写进程中教师们给予我专门大的帮忙,帮忙解决了很多的难点,使得论文能够及时完成,那个地址一并表示真诚的感谢。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2