文档详情

数据结构实验报告,堆排序(共9篇).doc

发布:2017-05-01约1.52万字共40页下载文档
文本预览下载声明
数据结构实验报告,堆排序(共9篇) 数据结构实验6 堆排序 数据结构《实验6》实验报告 实验结果(运行结果界面及源程序,运行结果界面放在前面): 篇二:数据结构堆排序问题实验报告 《数据结构与算法设计》 堆排序问题实验报告 ——实验五 专业:物联网工程 班级:物联网1班 学号 姓名:刘沛航 一、 实验目的 本程序是利用堆排序算法进行排序按照字典序列由小到大排列出某个集体中的n个人名(汉语拼音)。 二、实验内容 用户可以根据自己的需求输入一个顺序表,并通过利用堆排序按非递减排序已有的顺序表。大概操作如下:1、首先创建一个空列表,用于保存已排序的有序数列(我们称之为有序列表)。2、找到数列中最大的数字,将其加在有序列表的末尾,并将其从原数列中删除。3重复2号步骤,直至原数列为空。 三、程序设计 1、概要设计 (1)为实现上述算法,需要顺序表的抽象数据类型: ADT sqlist { 数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可 唯一标识数据元素的关键字。 数据关系R:数据元素同属一个集合。 基本操作P: Creatsqlist(amp;l) 操作结果:构造一个具有n个数据元素的顺序表l。 ListLength(L) 初始条件:线性表L已经存在 操作结果:返回L中数据元素的个数。 destroylist(amp;l) 初始条件:顺序表l存在。 操作结果:销毁顺序表l。 displaylist(l) 初始条件:顺序表l存在。 操作结果:显示顺序表l。 quicksort (amp;l) 初始条件:顺序表l存在。 操作结果:通过快速排序得到一个有序的顺序表l。 heapsort (amp;l) 初始条件:顺序表l存在。 操作结果:通过堆排序得到一个有序的顺序表l。 heapadjust (amp;l,s,m) 初始条件:顺序表l存在。 操作结果:调整h-r[s]的关键字,使h-r[s]成为一个大顶堆 partion (amp;l,amp;low,high) 初始条件:顺序表l存在。 操作结果:交换顺序表中子表r[low...high]的记录,使枢轴记录到 位,并返回其所在的位置。 }ADT sqlist (2). 本程序有三个模块: ⑴ 主程序模块 main(){ 初始化; { 接受命令; 显示结果; } } ⑵ 创建顺序表的模块:主要建立一个顺序表; ⑶快速排序模块:得到一个有序的顺序表; (4)输出顺序表模块:显示已创建顺序表; (5)堆排序模块:得到一个有序的顺序表。 void main() { 初始化; 构造迷宫; 迷宫求解; 迷宫输出; } b、 栈模块——实现栈的抽象数据类型 c、 迷宫模块——实现迷宫的抽象数据类型 2、详细设计 (1)元素类型,结点类型 typedef struct { int key; }keytype; typedef struct { keytype r[100]; int length; }sqlist; (2)对抽象数据类型中的部分基本操作的伪码算法如下: /*创建顺序表*/ void creat(sqlist *l) { int i,key; printf(please intput it#39;s length:); scanf(%d,amp;l-length); printf(\n\nplease intput %d data\n,l-length); for(i=1;i=l-length;i++) { scanf(%d,amp;key); l-r[i].key=key; } } /*交换顺序表中子表r[low...high]的记录,使枢轴记录到位,并返回其所在的位置*/ int partion(sqlist *l,int low,int high) {int pivotkey; l-r[0]=l-r[low]; pivotkey=l-r[low].key; while(lowhigh) { while(lowhighamp;amp;l-r[high].key=pivotkey) --high; l-r[low]=l-r[high]; while(lowhighamp;amp;l-r[low].key=pivotkey) ++low; l-r[high]=l-r[low]; } l-r[low]=l-r[0]; return low; } /*快速排序*/ void Qsort(sqlist *l,int low,i
显示全部
相似文档