西华大学理学院课程设计说明书
}
}
L.r[low] = L.r[high]; //将比枢轴记录小的记录移到低端 while (low < high && 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, int high) { 置 }
}
Qsort(L, pivotloc + 1, high); // 对高子表递归排序 int pivotloc;
if (low < high) //长度大于1 {
pivotloc = Partition(L, low, high); //将L.r[low..high]一分为二
Qsort(L, low, pivotloc - 1); // 对低子表递归排序,pivotloc是枢轴位
// 堆排序
首先由无序序列建成一个堆,输出堆顶元素后,以堆中最后一个元素替代之,此时根节点的左右子树均为堆,则仅需自上至下进行调整即可,直至所有元素按非递减顺序输出。
void HeapAdjust(HeapType &H, int s, int m) //堆排序 { int j; RedType rc; rc = H.r[s];
for (j=2*s; j<=m; j*=2) {
if (j 12 排序综合 if (rc.key >= H.r[j].key) break; H.r[s] = H.r[j]; s = j; } H.r[s] = rc; } void HeapSort(HeapType &H) { int i; RedType temp; for (i=H.length/2; i>0; --i) HeapAdjust ( H, i, H.length ); for (i=H.length; i>1; --i) { temp=H.r[i]; H.r[i]=H.r[1]; H.r[1]=temp; HeapAdjust(H, 1, i-1); } } //计算时间的函数 double duration(clock_t x, clock_t y) //算法耗时统计 { } double dur; dur = (double)(y - x) / CLOCKS_PER_SEC; return dur; 到此为止,所有功能已经分别实现了,通过执行各个函数,就可以完成相应的功能。现在唯一需要做的就是找个函数来将他们“集中起来”,用来组合在一起,才能让它们互相配合,一起工作。这个任务当然是由main()来完成了: void main() 13 西华大学理学院课程设计说明书 { printf(\ printf(\功 能: 排 序 综 合\\n\\n\printf(\编 译 环 境:V S 2 0 1 0\\n\\n\printf(\发 布 日 期:2 0 1 5 - 1 1 - 2 5\\n\\n\ printf(\程序开始!***********************\\n\int i, j, a[M]; char ch; //定义i,j;待排序数组a[M]; //字符ch,用于记录选项; srand((unsigned)time(NULL));//设置随机种子; for (i = 1; i < M + 1; i++) a[i] = rand() % 5000; //随机生成待排序数组a; printf( \产生200个随机数\\\\/\\n\system(\ for (i = 1; i < M + 1; i++) //每个元素占6个字符,每行十个元素的格式输出随机生成的待 排序数组a; { } system(\ cout << setw(6) << a[i] << \if (i % 10 == 0) printf(\ loop: //排序算法主菜单; printf(\菜 单\\n\ printf(\printf( \请选择你要使用的排序方法:\\n\ printf(\快速排序;\\n\\t\\t2.起泡排序;\\n \\t\\t3.直接插入排序;\\n \\t\\t4.归并排 序;\\n\ 14 printf( \简单选择排序;\\n\\t\\t6.堆排序;\\n\\t\\t7.退出.\\n\printf(\ 排序综合 loop1://排序过程; fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件;为了确 保不影响后面的数据读取; ch = getchar(); //获取选项,选择相应的排序算法; 在main()里,对各个相应的操作指定了想象的选择序号,使用户简单明了,形象直观,首先必须成功生成2000个随机数,现实中一样。因为你需要排序的对象不明确,又如何能准确的确定相应的查找方式呢,因为生成就是确定需要排序的对象,所以先确定了对象,然后通过一个友好的容易操作的界面面向用户,这样即使用户对计算机一窍不通,也能够轻松的使用这个系统进行随机数的各种排序了。为了使用户能够在进行了一项操作之后还能进行另外的操作,例如:快速排序之后还可以继续选择堆排序等等。所以让程序一直执行,直到用户输入退出的信息后才中止程序,这样做程序显得更人性化些! 到此,整个程序也就完成了。 3.3实验结果 文件存储排序部分结果如下图: 图0 15 西华大学理学院课程设计说明书 4.系统测试和结果分析 4.1设计测试数据 随机生成2000个数(为了直观一些我本次调试只是生成了200个随机数) 4.2调试的详细过程 对于所有执行过程,通过图片最好说明问题了,程序开始如下图所示: 0. 运行程序初始界面: 图 1 1.生成随机数,按任意键即可,如下图2: 图 2 2.点击任意键继续 ,弹出选择菜单,并提示用户选择需要的服务如图3: 16