文档详情

《算法分析与设计》实验指导书(学时).doc

发布:2016-06-14约9.15千字共23页下载文档
文本预览下载声明
数理学院 算法分析与设计 目 录 实验一 排序…………………………..…..………3 实验二 …………………..…………..5 实验三 ……………………….8 实验四 最短路径问题……………………10 实验一 排序 实验目的 1)以排序问题为例,掌握分治法的基本设计策略 2)熟练掌握排序算法的实现; 3)熟练掌握快速排序算法的实现; 4) 理解常见的算法经验分析方法 实验环境 计算机、C语言程序设计环境 实验学时 2学时 实验内容与步骤 实验数据 要求:编写一个函数datagenerate,生成2000个在区间[1,10000]上的随机整数,并将这些数输出到外部文件data.txt中。这些数作为实验的数据。 实现排序算法 要求:实现算法。 输入data.txt; 输出文件resultsS.txt(注:建议将此排好序的数据作为实验二的算法输入);运行时间TimeS。 算法: /* A[] 中包含待排元素;array B[] is a work array */ TopDownMergeSort(A[], B[], n) { TopDownSplitMerge(A, 0, n, B); } // iBegin is inclusive; iEnd is exclusive (即:A[iEnd]不是待排元素) TopDownSplitMerge(A[], iBegin, iEnd, B[]) { if(iEnd - iBegin 2) // 如果只有1个待排元素,返回。 return; // recursively split runs into two halves until run size == 1, // then merge them iMiddle = (iEnd + iBegin) / 2; // 划分 TopDownSplitMerge(A, iBegin, iMiddle, B); TopDownSplitMerge(A, iMiddle, iEnd, B); TopDownMerge(A, iBegin, iMiddle, iEnd, B); // 合并;元素放到数组B中。 CopyArray(B, iBegin, iEnd, A); // copy the merged runs back to A } // left half is A[iBegin : iMiddle-1] // right half is A[iMiddle : iEnd-1] TopDownMerge(A[], iBegin, iMiddle, iEnd, B[]) { i0 = iBegin, i1 = iMiddle; // While there are elements in the left or right runs for (j = iBegin; j iEnd; j++) { // If left run head exists and is = existing right run head. if (i0 iMiddle (i1 = iEnd || A[i0] = A[i1])) { B[j] = A[i0]; i0 = i0 + 1; } else { B[j] = A[i1]; i1 = i1 + 1; } } } CopyArray(B[], iBegin, iEnd, A[]) { for(k = iBegin; k iEnd; k++) A[k] = B[k]; } 实现快速排序算法 要求:实现QuickSort 算法。 输入:待排数据文件data.txt; 输出文件resultsQS.txt;运行时间TimeQS。 快速排序算法: Procedure QuickSortp, q) integer p, q;global n, A(1:n) if p q then j ← q+1 Partition(p, j)A(p)划分元素表A[p : j-1];划分后,划分元素下标由参数j带出。 QuickSort (p, j-1); QuickSort(j+1, q); end if end QuickSort 用元素A(m)划分元素表A[m : p-1]: Procedure partition(m, p
显示全部
相似文档