数据结构课程设计
4.7快速排序模块
快速排序模块可实现用快速排序法对数据进行排序,该模块具体实现程序流程如图7所示。
开始start_t=clock();int pivotkey;yd1=0,bj1=0;L.elem[0]=L.elem[low]; yd1++;pivotkey=L.elem[low].key;Nlow 图7 快速排序模块 9 数据结构课程设计 4.8归并排序模块 归并排序模块可实现用归并排序法对数据进行排序,该模块具体实现程序流程如图8所示。 开始start_t=clock();int i=low, j=m+1, k=low;yd1=0,bj1=0;Ni<=m&&j<=highYR[i].key<=R[j].keyY bj1++; R1[k]=R[i]; yd1++; i++; k++;Nbj1++; R1[k]=R[j]; yd1++; j++; k++;NYR1[k]=R[i]; yd1++; i++; k++;i<=mj<=highYR1[k]=R[j]; yd1++; j++; k++;Nend_t=clock();t5=(double)(end_t-start_t)/CLK_TCK;输出bj1,yd1,t5结束 图8 归并排序模块 10 数据结构课程设计 4.9条形图模块 条形图模块可用星号显示出各种算法排序的比较结果,该模块具体实现程序流程如图9所示。 开始long int d[6];int i,n; i=0;Ni<5;Yd[i]= sqrt (A[i]/A[5]); printf(\归并排序: *\ printf(\选择排序: \n=0,i=0;Nn<=d[i];Y printf(\;n++printf(\冒泡排序: \n=0,i=1;Nn<=d[i];Yprintf(\n++其他排序同理结束 图9 条形图模块 11 数据结构课程设计 5调试与测试 5.1 调试 调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。 (1)问题:用条形图表示时,不能根据数据而表示出星号的多少。 解决办法:选择要表示的数据最小的一种排序作为基数,每种排序所要比较的数据可运用数学运算计算出是基数的多少倍,从而输出几个星号。 (2)问题:输入数据数目为2个时程序运行错误。 原因:待比较的数据为2个时,作为基数的那种排序的数据为0,不能做分母,所以会出现运行错误。 解决方法:输入较大的数,使要用条形图表示出来的数据不为0即可。 5.2测试 软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。 测试数据过程如下。 (1) 输入功能测试 输入数据1:100 预期结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 运行结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 说明:预期和运行结果相同。 输入数据2:25000 12 数据结构课程设计 预期结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 运行结果:超出范围重新输入! 说明:不能输入比25000大的数。 (2)输出功能测试 输入数据1:200 预期结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 运行结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 说明::预期和运行结果相同。 输入数据2:4 预期结果:输出各排序算法的比较次数、移动次数和排序用时,随后输出数据比较所对应的条形图。 运行结果:在输出移动次数比较的条形图时出现运行错误。 说明:不能输入比5小的数。 6结论 经过这一段时间的程序设计,该课设任务书中题目所要求的功能也都一一实现。可以伪随机产生不同的数据,六种内部排序算法对其数据进行排序,记录比较次数、移动次数和排序用时,并用条形图直观的表示出不同算法的优劣。不过本程序还可以添加细节,例如:可输出个选择排序方法的菜单,挑选不同排序方法对数据进行比较,也可以再循环选择并用条形图表示出来。 结束语 为期两个星期的课程设计终于顺利完成,这段时间让我对数据结构这门课程有更多的了解和认识,同时也从编程中所遇到的挫折和困难中吸取更多有价值的经验。编程需要耐心和信心,要有缜密的心思来全面考虑问题,否则编出的程序不能完全满足题目要求或运行错误。通过这次课设,我更深入了解了六种内部排序算法的排序方法和时间复杂度,从而还算顺利的完成了本次课程设计。编程的 13