ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:128.50KB ,
资源ID:10508489      下载积分:6 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(数据结构课程设计(各种排序算法的实现).doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构课程设计(各种排序算法的实现).doc

1、 数 据 结 构 课程设计报告 题 目: 专 业: 班 级: 学 号: 姓 名: 指导老师: 时 间:

2、 8 一、课程设计题目及所涉及知识点 设计题目:排序算法实现 知识点:malloc申请连续存储空间、冒泡排序、快速排序、直接插入排序的算法实现、 结构体的定义与调用、函数的递归调用 二、课程设计思路及算法描述 设计思路:1、确定程序要实现的功能即(1)允许用户输入一组数据,任意多个。 (2)由用户选择对该组数据进行排序的方法:直接插入排序、冒泡排序、快速排序。并可以查看每趟排序的结果。 2、确定程序所需要的功能块,存储结构-结构体,malloc申请存储空间,各功能函数--冒泡排序功能块maopao();、直接插入排序功能块insertsort();、快速排

3、序q_sort();、数据访问功能块traveres();、数据输出功能块liststring();主函数部分main();。 3、编写代码具体实现各项功能,并进行调试。 算法描述: 冒泡排序(Bubble Sorting)的基本思想: 设待排序n个元素存放在数组a[n]中,无序区范围初始为(a(0),a(1),a(2),...,a[n-1]),冒泡排序方法是在当前无序区内,从最上面的元素a[0]开始,对每两个相邻的元素a[i+1]和a[i](i=0,1,...,n-1)进行比较,且使值较小的元素换至值较大的元素之上(若a[i]>a[i+1],则a[i]和a[i+1]的值互换),这样经过

4、一趟冒泡排序后,假设最后下移的元素为a[k],则无序区中值较大的几个元素到达下端并从小到大依次存放在a[k+1],a[k+2],...a[n-1]中,这样无序区范围变为(a[0],a[1],a[2],...,a[k])。在当前无序区内进行下一趟冒泡排序。这个过程一直到某一趟排序中不出现元素交换的动作,排序结束。整个排序过程最多执行n-1遍。 算法实现: void BubbleSort(SeqList R) //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序 { int i,j; Boolean exchange; //交换标志

5、 for(i=1;i=i;j--) //对当前无序区R[i..n]自下向上扫描 if(R[j+1].key

6、e=TRUE; //发生了交换,故将交换标志置为真 } if(!exchange) //本趟排序未发生交换,提前终止算法 return; } //endfor(外循环) } //BubbleSort 直接插入排序(Straight Insertion Sorting)的基本思想: 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复

7、n-1次可完成排序过程。 把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],...进行比较,将比t大的元素右移一个位置,直到发现某个j(0<=j<=i-1),使得a[j]<=t或j为(-1),把t赋值给a[j+1]. 算法实现: void insert_sort(ElemType a[],int n) //待排序元素用一个数组a表示,数组有n个元素 { int i,j; ElemType t; for ( i=1; i

8、插入 { t=a[i]; //把待排序元素赋给t j=i-1; while ((j>=0)&& (t

9、pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。 算法实现: void QuickSort(SeqList R,int low,int high) { //对R[low..high]快速排序 int pivotpos; //划分后的基准记录的位置 if(low

10、s-1); //对左区间递归排序 QuickSort(R,pivotpos+1,high); //对右区间递归排序 } } //QuickSort 三、课程设计中遇到的难点及解决办法 问题:如何实现对每趟排序结果的存储、访问? 解决方法:设计一个并行的存储空间(结构体数组),存储每趟排序的结果,通过指针型参数 传递存储空间的地址实现数据的实时存储。 问题:如何实现结构体数组作为参数传递数据,并使数组中的数据可以真实的改变,实现类 似于“&”(引用)应用的功能? 解决方法:运用指针即将结构体数组的首地址作为一个结构体指针进行参数的传递

11、由于指 针的特性从而实现数据的实时传递! 四、总结 课程设计是巩固所学知识理论,提高程序设计的重要环节,通过课程设计的训练,使我们能够综合应用数据结构的基础知识,加深了对于所学知识的理解,也更加懂得了实践的重要性,也明白了各种算法重要的是理解其原理,而不是死记硬背!同时让我们更加了解自身不足和知识学习缺陷,从而不断完善自我,提高自己的学习水平。在设计过程中我们真正实现了把所学知识运用于实践,逐渐培养自己的思维和逻辑能力以及实践能力,做到学以致用。 五、附录—主要源程序代码及运行结果 #include "stdio.h" #include "malloc.h" typedef

12、 int elemtype; typedef struct { //存储排序数据 elemtype *data; int length; }list; typedef struct{ //存储每趟排序数据 elemtype *sqdata; }sqlist,*linklist; /* * 设置一个标志位flag,将其初始值设置为非0,表示被排序的表是一个 *无序的表,在进行数据交换时,修改flag为0。在新一轮排序开始时,检查 *此标志,若此标志为1,表示上一次没有做过交换数据,则结束排序;否则 *继续排序; */ int maopao(list

13、l,linklist sql,int x){ //冒泡排序 int flag; for(int i=1;i<=x;i++){ flag=1; //标记是否有数据交换 for(int j=1;j<=x-i;j++){ if(l.data[j]>l.data[j+1]){ l.data[0]=l.data[j]; l.data[j]=l.data[j+1]; l.data[j+1]=l.data[0]; flag=0; } } for(int m=1;m<=x;m++) //每趟排序结果的存储 s

14、ql[i-1].sqdata[m]=l.data[m]; if(1==flag) break; } return i-1; //返回排序趟数 } //直接插入排序 int Insertsort(list &l,linklist sql,int x){ for(int i=2;i<=x;i++){ if(l.data[i]

15、l.data[0]; } for(int m=1;m<=x;m++) //每趟排序结果的存储 sql[i-2].sqdata[m]=l.data[m]; } return i-2; //返回排序趟数 } void q_sort(list &l,int low,int high){ //快速排序(递归) int pivot; int left,right; l.data[0]=l.data[low]; left=low; right=high; if(low<=high){ while(low

16、low=l.data[0])) high--; if(low!=high){ l.data[low]=l.data[high]; low++; } while((low

17、if(leftpivot) q_sort(l,high+1,right); } else printf("未输入数据!"); } //访问一遍数据并输出最终排序结果 void traveres(list L,int x){ printf("最终排序结果:"); for(int i=1;i<=x;i++) printf("%3d",L.data[i]); printf("\n"); printf("********************

18、\n\n"); } void liststring(list l,linklist sql,int num,int x){ //输出每趟排序结果 int z; printf("共记录有%d趟排序结果,\n",num); traveres(l,x); printf("要查看第几趟排序结果? "); scanf("%d",&z); printf("\n"); printf("***************************************\n\n"); printf("第%d趟排序结果为:",z

19、); for(int a=1;a<=x;a++) printf("%5d",sql[z-1].sqdata[a]); printf("\n\n"); } void main(){ //主函数部分 list l; int x; int y; int num; linklist sql; printf("请输入要排序的数据的个数:"); scanf("%d",&x); if(x==0) printf("数据个数不能为0 !\n"); else{ l.data=(elemtype *)malloc(x * sizeof(elemt

20、ype)); //申请存储空间 sql=(linklist )malloc(x * sizeof(linklist)); for(int q=0;q

21、方法:1、冒泡 2、直接插入排序、3、快速排序\n"); printf("您的选择为: "); scanf("%d",&y); printf("***************************************\n"); switch(y){ case 1: printf("您选择了“冒泡排序”\n"); num=maopao(l,sql,x); liststring(l,sql,num,x); printf("***************************************\n"); b

22、reak; case 2: printf("您选择了“直接插入排序”\n"); num=Insertsort(l,sql,x); liststring(l,sql,num,x); printf("***************************************\n"); break; case 3: printf("您选择了“快速排序”\n"); q_sort(l,1,x); traveres(l,x); break; default: printf("输入错误!"); } } printf("按任意键结束!\n\n\n"); } 六、指导老师评语及成绩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服