归并排序的设计与实现.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
归并排序的设计与实现

学 号: 武汉理工大学 课 程 设 计 题 目 归并排序的设计与实现 院 系 计算机学院 专 业 软件工程 班 级 姓 名 指导教师 2010年7月12日 课程设计任务书 学生姓名: 专业班级: 软件0802班 指导教师: 工作单位: 计算机科学与技术学院 题 目: 归并排序的设计与实现 课程设计要求: 1、熟练掌握基本的数据结构; 2、熟练掌握各种算法; 3、运用高级语言编写质量高、风格好的应用程序。 课程设计任务: 1、系统应具备的功能: (1)输入一组数,用递归和非递归程序实现归并排序 (2)分析归并排序的复杂度 (3)将归并排序的思想用于外部排序中 2、数据结构设计; 3、主要算法设计; 4、编程及上机实现; 5、撰写课程设计报告,包括: (1)设计题目; (2)摘要和关键字; (3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、不足之处、设计体会等; (4)结束语; (5)参考文献。 时间安排: 2010年7月5日-9日 (第19周) 7月5日 查阅资料 7月6日 系统设计,数据结构设计,算法设计 7月7日 -8日 编程并上机调试 7月9日 撰写报告 7月10日 验收程序,提交设计报告书。 指导教师签名: 2010年7月4日 系主任(或责任教师)签名: 2010年7月4日 归并排序的设计和实现 摘要: 程序包括数据结构设计,C++语言设计的伪代码,和完整代码,以及它的复杂度分析。 关键字:模型化, 2-路归并, 一趟归并, 归并 0.引言 归并排序是一种稳定的内部排序,“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。无论是顺序存储结构还是链表存储结构,都可在O(m+n)的时间量级上实现。利用归并的思想容易实现排序。 2—路归并排序:假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到不小于n/2整数个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止。 需求分析 (1)通过建立一个结构体,用来存放数据信息,包括数据的个数,本身记录。 (2)2-路归并排序的算法,实现两两归并。 (3)主函数初始化数据,及打印数据结果。 思路分析 归并排序:对一个数组进行排序,可以将之分解为n个已经排序的子问题,然后进行合并就可以得到了原问题的解。分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将个子问题的解合并得到原问题的解。分为三步: 1)把大的问题分解成小的问题:MergeSort; 2)把两个较小的子问题合并成一个较大的问题:Merge; 3)对已排序数组进行拷贝:Copy; 3.数据结构设计 用结构体存储待排的数据。 #include "stdio.h" #include<stdio.h> #define MAXNUM 100 #define TRUE 1 #define FALSE 0 typedef int DataType; typedef struct { int n; /* n为文件中的记录个数,n<MAXNUM */ int record[MAXNUM]; } SortObject; 4.算法设计 4.1伪代码 template <class Type > void MergeSort(Type a[],int left,int right) { if(left<right){ //至少有2个元素 int i=(left+right)/2; //取中点 MergeSort(a,left,i); MergeSort(a,i+1,right); Merge(a,b,left,i,right); //合并到数组b Copy(a,b,left,right); //复制回数组a } } Template <class Type > void Merge(Type c[],Type d[],int left,int m,int right ) { int i=1eft, j=m+1; k=1eft; while((i<=m)&&(j<=right)) if(c[i]<=c[j]) d[k++]=c[i++]; else d[k++]=c[j++]; while(j<=right)

文档评论(0)

小教资源库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档