- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
406109070107李平
实习报告
题目:内部排序算法比较2008-6-16
一、需求分析
1. 本程序中,数据元素由随机函数产生伪随机数。待排序表的表长不小于1005其中的数据要用伪随机数产生程序产生:至少要用5组不同的输入数据作比较:比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。主要工作是设法在已知算法中的适当位置插入对关键字的比较次数和移动次数的计数操作。最后要对结果出简单分析,包括对各组数据得出结果波动大小的解释起泡排序直接插入排序简单选择排序简单选择排序P)artition sort //选择快速排序快速排序希尔排序希尔排序Sort //选择堆排序堆排序数据伪随机数产生程序产生二、概要设计
1. 待排序数列的抽象数据类型定义为:
ADT Array
{
数据对象: ji=0,…bi-1,i=1,2…..n
D={aj1j2…jn|n(0)称为数组的维数,bi是数组第i维的长度,
Ji是数组元素第i维下标,aj1,j2…jn∈ElemSet}
数据关系: R={R1,R2,R3…Rn}
Ri={aj1…ji…jn,aj1…ji+1…jn|0=jk=bk-1,1=k=n且k!=i
0=ji=bi-2,
aj1…ji…jn,aj1…ji+1…jn∈D,i=2,3…n}
基本操作:
InitArray(a,n)
/*初始化n维数组*/
BubbleSort(SqList L)
/*冒泡排序*/
InsertSort( SqList L)
/*插入排序*/
Partition(SqList L,int low,int high)
/*快速排序*/
SelectSort(SqList L)
/*选择排序*/
HeapAdjust(HeapType H,int s,int m)
/*已知H.r[s…m]中记录的关键字除H.r[s].key之外均满足堆的定义,本函数调整H.r[s]的关键字,使H.r[s…m]成为一个大顶堆*/
HeapSort(HeapType H)
/*对顺序表H进行堆排序*/
ShellInsert(SqList L,int dk)
/*对顺序表L作一趟希尔插入排序。本算法是和一趟直接插入排序相比,做了以下修改:1.前后记录位置的增量是dk,而不是1;2.r[0]只是暂存单元,不是哨兵。当j=0时,插入位置已找到*/
ShellSort(SqList L,int dlta[],int t)
/*按增量序列dlta[0…t-1]对顺序表L作希尔排序*/
}
2. 本程序包含四个模块
1) 主程序模块
在这个模块中,主要实现用户根据电脑产生的伪随机数,选择不同的内部排序方法,体会一下各个内部排序方法对大量数据排序的时间复杂度与空间复杂度。通过调用子模块实现数据排序。
void main()
{
输出提示及其选择;
do
{
接收命令;
执行命令;
}while(不满足条件)
结束;
}
2) 待排序数组的抽象数据类型定义模块
在本模块中包含所有排序方法所需的抽象数据类型的定义和各个排序算法的函数声明;
3) 各个排序算法的实现模块
包括冒泡排序、简单插入排序、快速排序、简单选择排序、希尔排序和堆排序的具体算法实现。
4) 分析各个排序方法输出的比较次数和移动次数,画出各个排序方法的波动图。
3. 各模块之间的调用关系如下:
三、详细设计
1. 元素类型、结点类型和指针类型
typedef int KeyType;
typedef int InfoType;
typedef struct
{
KeyType key;
InfoType otherinfo;
}RedType;
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
SqList L;
typedef struct
{
int compare;
int move;
}Array;
Array a,b,c;
2. 函数声明
int RandomNum();//产生随机数
void InitArray();/*初始化n维数组*/
void BubbleSort();/*冒泡排序*/
void InsertSort();/*插入排序*/
int Partition(int low,int high) ;/*一趟快速排序*/
void QSort(int low,int high);/*快速排序的递归排序*/
void QuickSort();/*快速排序*
文档评论(0)