1、1数据结构课程设计报告实验五 排序一、需求分析:本演示程序用 C+6.0 编写,完成各种排序的实现,对输入的一组数字实现不同的排序方法,对其由小到大顺序输出。(1)分别对直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序算法进行编写。(2) 、对存储的函数即输入的数字进行遍历。(3) 、初始化函数对输入的数字进行保存。(4) 、主函数实现使用者操作界面的编写,对输入、选择、保存、输出的各种实现。这当中还包括了各个函数的调用的实现。(5) 、程序所能达到的功能:完成对输入的数字的生成,并通过对各排序的选择实现2数字从小到大的输出。二、程序主要功能以及基本要求:(1) 、设计一个菜单,格
2、式如下:1、直接插入排序2、希尔排序3、冒泡排序4、快速排序5、选择排序6、堆排序7、退出(2) 、选择不同的菜单但进行相应的排序,并给出排序的关键字序列。三、系统框架图:本程序包含了 9 个函数,它们分别是:(1) 、直接插入排序的算法函数 InsertSort() 。(2) 、希尔排序的算法函数 ShellSort() 。(3) 、冒泡排序算法函数 BubbleSort() 。(4) 、快速排序的算法函数 Partition() 。(5) 、选择排序算法函数 SelectSort() 。(6) 、堆排序算法函数 HeapAdjust() 。(7) 、对存储数字的遍历函数 Visit() 。
3、(8) 、初始化函数 InitSqList() 。(9) 、主函数 main() 。四、详细设计实现各个算法的主要内容,下面是各个函数的主要信息:(1)各个排序函数的算法:主函数各个排序算法函数对输入的数组进行遍历初始化操作界面的设计,函数的调用。3一、直接插入排序void InsertSort(SqList for( i=2; i0)dk /= 3;/减小增量for (i = dk; i = dk) j -= dk; L.rj.key = L.r0.key; 三、冒泡排序void BubbleSort(SqList for(i=0;i L.rj+1.key)flag = 0;int temp
4、;temp = L.rj.key;L.rj.key = L.rj+1.key;L.rj+1.key = temp;/若无交换说明已经有序if(flag=1)break;5四、快速排序int Partition(SqList int pivotkey = L.rlow.key;/一般将顺序表第一个元素作为支点while(low =pivotkey)high-;L.rlow = L.rhigh;while(low= H.rj.key)break;H.rs = H.rj;s = j;H.rs = rc;void HeapSort(HeapType RedType temp;for(i = H.len
5、gth; i0; -i)HeapAdjust(H,i,H.length);for(i=H.length; i1; -i)temp = H.r1;H.r1 = H.ri;H.ri = temp;HeapAdjust(H,1,i-1);8(2)遍历函数与初始化void Visit(SqList L)for(int i=1; i=L.length; i+)coutL.ri.key“ “;coutendl;void InitSqList(SqList i=L.length;i+)L.ri.key = ai;五、测试结果以下是各种界面的测试结果:(1)输入的界面 :(2)排序操作界面:9(3)各种排序的结果:六、设计不足以及存在问题本程序是基于 C+6.0 的实现,其实在设计上的改进可以利用类进行操作,这种类的改10进了存储上的不足还可以实现了,对各种的函数基于类的实现,这就是对本程序的改进,这是十分重要的与是改进的基础。本程序出现过的问题是主函数对个函数的调用以及对存储数组的调用上出现了问题,导致排序的结果以及排序的界面出现了问题,的不到实现。后来对算法进行改进,最终把问题得以解决。