- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)
1亿VIP精品文档
相关文档
最近下载
- 民航服务人员职业素养探析论文.doc VIP
- XJJ110-2019-现浇混凝土复合外保温模板应用技术标准.docx
- 部编版三年级语文下册第16课《宇宙的另一边》精品课件(统编).pptx
- DL∕T 5205-2021 电力建设工程工程量清单计算规范 输电线路工程.pdf
- 孵化器种子基金创投基金组建方案模版.doc
- 2024年广州市高三二模(普通高中毕业班综合测试(二)地理试卷(含答案).docx
- 精神病人噎食护理课件.pptx VIP
- 2024年济南市2024届高三高考二模数学试题卷(含答案详解).pdf
- 高级钢筋工复习试题及答案.doc VIP
- 湖南捷瑞化工有限公司年产3000吨五氯酚钠项目环境影响报告书.pdf
文档评论(0)