查找排序实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编程实训》
实验报告书
专业:计算机科学与技
术
班级:151班
学号:
姓名:
指导教师:
日期:2016年6月30
日
目录
一、需求分析 (3)
1.任务要求 (3)
2.软件功能分析 (3)
3.数据准备 (3)
二、概要设计 (3)
1.功能模块图 (4)
2.模块间调用关系 (4)
3.主程序模块 (5)
4.抽象数据类型描述 (5)
三、详细设计 (6)
1.存储结构定义 (6)
2.各功能模块的详细设计 (7)
四、实现和调试 (7)
1.主要的算法 (7)
2.主要问题及解决 (8)
3.测试执行及结果 (8)
五、改进 (9)
六、附录 (9)
1.查找源程序 (9)
2.排序源程序 (9)
目录
1 需求分析
1.1 任务要求
对于从键盘随机输入的一个序列的数据,存入计算机内,给出各种查找算法的实现;以及各种排序算法的实现。
1.2 软件功能分析
任意输入n个正整数,该程序可以实现各类查找及排序的功能并将结果输出。
1.3 数据准备
任意输入了5个正整数如下:
12 23 45 56 78
2 概要设计(如果2,3合并可以省略2.4)
2.1 功能模块图(注:含功能说明)
2.2 模块间调用关系
2.3 主程序模块
2.4 抽象数据类型描述
存储结构:数据结构在计算机中的表示(也称映像)叫做物理结构。又称为存储结构。数据类型(data type)是一个“值”的集合和定义在此集合上的一组操作的总称。
3 详细设计
3.1 存储结构定义
查找:
typedef int ElemType ;
//顺序存储结构
typedef struct
{
ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配,号单元留空
int length; //表的长度
}SSTable;
排序:
typedef struct
{ //定义记录类型
int key; //关键字项
}RecType;
typedef RecType SeqList[Max+1]; //SeqList为顺序表,表中第0个元素作为哨兵
3.2 各功能模块的详细设计
查找:
void Create(SSTable *table, int length); // 构建顺序表
void FillTable(SSTable *table) // 无序表的输入
int Search_Seq(SSTable *table, ElemType key); //哨兵查找算
法
void Sort(SSTable *table ) // 排序算法
int Search_Bin(SSTable *table, ElemType key) // 二分法查找(非递归)
排序:
void InsertSort(SeqList R) //对顺序表R中的记录R[1‥n]按递增序进行插入排序
void BubbleSort(SeqList R) //自下向上扫描对R做冒泡排序
int Partition(SeqList R,int i,int j)//对R[i‥j]做一次划分,并返回基准记录的位置
void QuickSort(SeqList R,int low,int high) //R[low..high]快速排序
void SelectSort(SeqList R) //直接选择排序
void Heapify(SeqList R,int low,int high) //大根堆调整函数
void MergePass(SeqList R,int length) //归并排序
4 实现和调试
4.1 主要的算法
查找:
①建立顺序存储结构,构建一个顺序表,实现顺序查找算法。
typedef struct {
ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配,号单元留空
int length; //表的长度
} SSTable;
②对顺序表先排序后,实现行二分法查找相关操作。
③定义二叉树节点,根据节点的值进行查找,并且实现节点的插入,删除等操作。
typedef struct BiTnode { //定义二叉树节点
int data; //节点的值
struct BiTnode *lchild,*rchild;
}BiTnode,*BiTree;
④定义哈希表以及要查找的节点元素,创建哈希表,实现其相关查找操作。
typedef struct {
int num;
} Elemtype; //定义查找的结点元素
typedef struct {
Elemtype *elem; //数据元素存储基址
int count; //数据元素个数
int sizeindex;
}HashTable;//定义哈希表
排序:
2. 排序相关实验内容及步骤。
①定义记录类型。
typedef struct{
int key; //关键字项
}RecType;
②实现直接插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已排序好的子文件中的适当位置,直到全部记录插入完成为止。
③实现冒泡排序:设想被排序的记录数组R[1‥n]垂直排序。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上“漂浮”(交换),如此反复进行,直到最后任意两个气泡都是轻者在上,重者在下为止。