欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    综合排序.docx

    • 资源ID:12658125       资源大小:121.04KB        全文页数:21页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    综合排序.docx

    1、综合排序课程设计(论文)任务书 软件学院 学院 08 软件工程+ 电子商务 专业 一 班 一、课程设计(论文)题目各种排序算法演示 二、课程设计(论文)工作自2009 年 12 月 21 日起至 2009 年 12月 26 日止。三、课程设计(论文) 地点: 多媒体实验室(5-302,303) 四、课程设计(论文)内容要求:1本课程设计的目的(1)熟练掌握C语言的基本知识和技能; (2)掌握各种排序(插入、冒泡,快速排序,简单选择,堆排序)方法及适用场合,并能在解决实际问题时灵活应用;(3)从空间和时间的角度分析各种排序;(4)培养分析、解决问题的能力;提高学生的科技论文写作能力。 2课程设计

    2、的任务及要求1)基本要求:(1)设计一个的菜单将在实现的功能显示出来,并有选择提示; (2)分别实现直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序,堆排序算法;(3)通过多种测试数据,对各种排序算法的时间复杂度和空间复杂度进行比较2)创新要求: 提高算法效率,降低时间复杂度和空间复杂度3)课程设计论文编写要求(1)要按照课程设计模板的规格书写课程设计论文(2)论文包括目录、正文、心得体会、参考文献等(3)课程设计论文用B5纸统一打印,装订按学校的统一要求完成4)答辩与评分标准: (1)完成原理分析:20分; (2)完成设计过程:40分; (3)完成调试:20分;(4)回

    3、答问题:20分。5)参考文献:(1)严蔚敏,吴伟民.数据结构. 北京:清华大学出版社,2006. (2)严蔚敏、吴伟民、米宁.数据结构题集。北京:清华大学出版社,2006.(3) 谭浩强. C程序设计(第二版)作者:清华大学出版社,2006.6)课程设计进度安排内容 天数地点构思及收集资料 2图书馆编程设计与调试 5实验室撰写论文 3图书馆、实验室学生签名: 09 年12 月21 日课程设计(论文)评审意见(1)完成原理分析(20分):优()、良()、中()、一般()、差(); (2)设计分析(20分):优()、良()、中()、一般()、差(); (3)完成调试(20分):优()、良()、中(

    4、)、一般()、差();(4)翻译能力(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()评阅人: 职称: 讲师 09 年12 月28 日目录一、 问题描述 4二、 内容简介 42.1 基本要求: 42.2. 算法思想: 42.3. 模块划分: 42.4. 数据结构: 52.5. 源程序: 52.6. 测试情况: 15三、小结 17四、参考文献 18一、 问题描述1.如何定义数据类型,并编写书上没有的冒号排序。2.如何编写时间算法函数计算一个排序所用的时间。3.如何运用循环实现所

    5、有排序算法时间和空间复杂度的比较。二、 内容简介2.1 基本要求:(1) 设计一个的菜单将在实现的功能显示出来,并有选择提示(2) 分别实现直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单排序、堆排序算法;(3) 通过多种测试数据,对各种排序算法的时间复杂度和空间复杂度进行比较2.2. 算法思想:1.自定义RECNODE结构体;2.依次定义各种排序的算法;3.设计一个高精度时间函数,分别测试各种排序的时间消耗;4.在主函数中,用开关语句swtich()case 值1;break;case值n;break;Default语句序列:n+1;调用各种排序算法,各种排序的时间消耗函数,从

    6、而在屏幕上输出供选择的菜单,各种排序时间和空间复杂度的比较。2.3. 模块划分:1.输入初始数据函数:int MakeList(RECNODE *r) 2.输出未排序前的数据函数:void UndealoutList(RECNODE *r,int n) 3.处理后的序列函数:void DealoutList(RECNODE*r,int n) 4.这种排序的算法:void InsertSort(RECNODE*r,int n)/直接插入排序void BiInsertionSort (RECNODE*r, int n) / 折半插入排序void BubleSort(RECNODE *r,int n

    7、) /冒泡排序int Partition(RECNODE*r,int*low,int*high)/一趟快速排序void QuickSort(RECNODE*r,int start,int end)/快速排序void SeleSort(RECNODE*r,int n)/直接选择排序void ShellSort(RECNODE *r,int n)/希尔排序void Sift(RECNODE*r,int i,int m)void HeapSort(RECNODE*r,int n)/堆排序5.排序时间测试函数:double TInsertSort(int len,RECNODE *a,int p)2.

    8、4. 数据结构:1.预定义常量和自定义类型:#define MAXSIZE 100 typedef struct int key; RECNODE;2.基本函数的算法用以下形式表示:函数类型 函数名(函数参数表)/算法说明 语句序列/函数名。3.定义 int b,t,i,j; /b为记录交换的次数,t为记录排序的趟数,i为排序的数据,j为暂存数据的临时变量。4. 输入初始数据函数中定义int k, j,k为输入数据个数,j为输入的数据。5.快速排序中定义static int w=0,int *low,*high。6.在直接选择排序中定义int z,临时储存i的值。7.在希尔排序中定义int d

    9、k,记录前后位置的增量。8.在排序时间消耗测试的函数和主函数中定义了int p,为菜单的序号。9.在主函数中定义int len,为测试数据的总长度。2.5. 源程序:#define MAXSIZE 100 / 一个用作示例的小顺序表的最大长度#include /* EOF(=Z或F6),NULL */#include#include#include /* malloc()等 */#include /* INT_MAX等 */#include /* atoi() */#include /* eof() */#include #include #include #include using nam

    10、espace std;typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */typedef struct int key; RECNODE; int b,t; /b为记录交换的次数,t为记录排序的趟数int MakeList(RECNODE *r) int j,k; printf(请输入初始数据(每个数据以空格隔开,-1结束): ); k=0; scanf(%d,&j); while(j!=-1) k+; rk.key=j; scan

    11、f(%d,&j); return k; /输入要排序的一组数据,并且返回数据的个数,以-1为结束标志void UndealoutList(RECNODE *r,int n) int i; printf(未排序前的数据 : ); for(i=0;in;i+) printf( %d,ri+1.key); printf(n); void DealoutList(RECNODE*r,int n) int i; printf(排序后的数据 : ); for(i=0;in;i+) printf( %d,ri+1.key); printf(n); printf(交换或比较的次数: %dn,b); print

    12、f(排序的趟数: %dn,t); void InsertSort(RECNODE*r,int n)/直接插入排序/ int i,j; b=0,t=0; /b为记录交换的次数,t为记录排序的趟数 for(i=2;i=n;i+) r0=ri; /r0的作用是暂存空间 j=i-1; while(r0.keyrj.key) /如果目标数比源数小 rj+1=rj; /则让大的数从后往前依次往后挪一个位置,然后让小数插入到恰当位置 j-; b+; rj+1=r0;b+; t+; void BiInsertionSort (RECNODE*r, int n)/ 对记录序列R1.n作折半插入排序int low

    13、,high,i,j,m;for ( i=2; i=n; +i ) r0 = ri; / 将Ri暂存到R0/low = 1; high = i-1;while (low=high) /在Rlow.high中折半查找插入的位置m = (low+high)/2; / 折半if (r0.key =high+1; -j )rj+1 = rj; / 记录后移rhigh+1 = r0; / 插入t+;b+ / BInsertSortvoid BubleSort(RECNODE *r,int n) /冒泡排序 int i,j; b=0,t=0; /b为记录交换的次数,t为记录排序的趟数 RECNODE tem

    14、p; /暂寸空间 for(i=1;i=i;j-)/目标数是从第一个数开始,被比较数从最后一个开始 if(rj+1.keyrj.key) /如果目标数比其下一个数要大 /则两数交换,下一趟比较则还是用原目标数与其下一个书比较 temp=rj+1;rj+1=rj; rj=temp;b+; else b+; /否则不用交换,继续和下一个数比较 t+; void BubleSort(double a) /时间数组的冒泡排序 int i,j; b=0,t=0; double temp; for(i=1;i=i;j-) if(aj+1=temp.key)&(ij) j-; /则不用换,只要让指向要比较的数

    15、的位置左移一位 w+; if(ij) /若遇到一个在目标数右边的小数 ri=rj; /则将小数赋给目标数原来所在的位置 i+; /要比较的数的位置右移一位 w+; while(ri.key=temp.key)&(ij)/同理比较,只是现在要比较的数在目标数的右边 i+; w+; if(ij) rj=ri; j-; w+; while(i!=j); ri=temp; b=w; /b为记录交换的次数 return i; void QuickSort(RECNODE*r,int start,int end)/快速排序 int i; static int q=0; if(startend) i= Pa

    16、rtition(r,&start,&end); q+; QuickSort(r,start,i-1); /对低子表递归排序,i为中间位置 QuickSort(r,i+1,end); /对高子表递归排序 t=q;/t为记录排序的趟数 void SeleSort(RECNODE*r,int n)/直接选择排序/ /每次都是将无序序列中的最小的数找到,然后依次放到有序序列的最后 int i,j,z; b=0,t=0; /b为记录交换的次数,t为记录排序的趟数 RECNODE temp; for(i=1;in;i+) z=i; for(j=i+1;j=n;j+) /从第i个后的序列中选出最小的一个数

    17、if(rj.key0) /一趟增量为dk的插入排序 for(i=dk+1;i=n;+i) if(ri.key0&r0.keyrj.key;j-=dk) rj+dk=rj; b+;/记录后移,查找插入位置 rj+dk=r0; dk=dk/2; /增量改为原来的一半 t+; void Sift(RECNODE*r,int i,int m) int j; static int x=0; RECNODE temp; temp=ri; j=2*i; while(j=m) /沿key较大的孩子结点向下筛选 if(jm&(rj.keyrj+1.key) /j为key较大的记录的下标 j+; x+; if(t

    18、emp.key=1;-i) Sift(r,i,n); / 建大顶堆 for(i=n;i=2;-i) / 将堆顶记录和当前未经排序子序列 / H.r1.i中最后一个记录相互交换 temp=r1; r1=ri; ri=temp; Sift(r,1,i-1); / 对 H.r1 进行筛选 t+; double TInsertSort(int len,RECNODE *a,int p) if(p!=8) len=MakeList(a); UndealoutList(a,len); /若为时间效率全比较,则不用把比较的具体过程输出,只需输出排序时间 LARGE_INTEGER m_liPerfFreq=

    19、0; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart=0; QueryPerformanceCounter(&m_liPerfStart); InsertSort(a,len); if(p!=8)DealoutList(a,len); LARGE_INTEGER liPerfNow=0; QueryPerformanceCounter(&liPerfNow); double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfF

    20、req.QuadPart; cout直接插入排序时间消耗:time MSn; return (time); /直接插入排序时间测试double TBiInsertionSort(int len,RECNODE *a,int p) if(p!=8) len=MakeList(a); UndealoutList(a,len); /若为时间效率全比较,则不用把比较的具体过程输出,只需输出排序时间 LARGE_INTEGER m_liPerfFreq=0; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart=0;

    21、QueryPerformanceCounter(&m_liPerfStart); InsertSort(a,len); if(p!=8)DealoutList(a,len); LARGE_INTEGER liPerfNow=0; QueryPerformanceCounter(&liPerfNow); double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart; cout折半插入排序时间消耗:time MSn; return (time); /折半插入排序时间测试double TBub

    22、leSort(int len,RECNODE *a,int p)if(p!=8)/若为时间效率全比较,则不用把比较的具体过程输出,只需输出排序时间len=MakeList(a); UndealoutList(a,len); LARGE_INTEGER m_liPerfFreq=0; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart=0; QueryPerformanceCounter(&m_liPerfStart); BubleSort(a,len); if(p!=8)DealoutList(a,len)

    23、; LARGE_INTEGER liPerfNow=0; QueryPerformanceCounter(&liPerfNow); double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart; cout冒泡排序序时间消耗:time MSn; return (time); /冒泡排序时间测试double TQuickSort(int len,RECNODE *a,int p) if(p!=8)len=MakeList(a); UndealoutList(a,len); /若为时间效率全比

    24、较,则不用把比较的具体过程输出,只需输出排序时间 LARGE_INTEGER m_liPerfFreq=0; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart=0; QueryPerformanceCounter(&m_liPerfStart); QuickSort(a,1,len); if(p!=8)DealoutList(a,len); /若为时间效率全比较,则不用把比较的具体过程输出,只需输出排序时间 LARGE_INTEGER liPerfNow=0; QueryPerformanceCounte

    25、r(&liPerfNow); double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart; cout快速排序时间消耗:time MSn; return (time); /快速排序时间测试double TSeleSort(int len,RECNODE *a,int p) if(p!=8)len=MakeList(a); UndealoutList(a,len); LARGE_INTEGER m_liPerfFreq=0; QueryPerformanceFrequency(&m_liPerfFreq); LARGE_INTEGER m_liPerfStart=0; QueryPerformanceCounter(&m_liPerfStart);SeleSort(a,len); if(p!=8) DealoutList(a,len); /若为时间效率全比较,则不用把比较的具体过程输出,只需输出排序时间 LARGE_I


    注意事项

    本文(综合排序.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开