1、本程序包含了9个函数,它们分别是:(1)、直接插入排序的算法函数InsertSort()。主函数各个排序算法函数对输入的数组进行遍历初始化操作界面的设计,函数的调用。(2)、希尔排序的算法函数ShellSort()。(3)、冒泡排序算法函数BubbleSort()。(4)、快速排序的算法函数Partition()。(5)、选择排序算法函数SelectSort()。(6)、堆排序算法函数HeapAdjust()。(7)、对存储数字的遍历函数Visit()。(8)、初始化函数InitSqList()。(9)、主函数main()。四、详细设计实现各个算法的主要内容,下面是各个函数的主要信息:(1)各
2、个排序函数的算法:一、直接插入排序void InsertSort(SqList &L) int i,j; for( i=2; i=L.length;i+) if(L.ri.key L.ri-1.key) L.r0 = L.ri; L.ri = L.ri-1; for( j=i-2; (L.r0.key L.rj.key); j-) L.rj+1 = L.rj; L.rj+1 = L.r0; 二、希尔排序void ShellSort(SqList &L) int i, j; int dk = 1;/增量 while(dk 0) dk /= 3;/减小增量 for (i = dk; i = dk)
3、 & (L.rj-dk.key L.r0.key) L.rj.key = L.rj-dk.key; j -= dk; L.rj.key = L.r0.key; 三、冒泡排序void BubbleSort(SqList & for(i=0;iL.length-2; int flag = 1; for(j=0;j L.rj+1.key) flag = 0; int temp; temp = L.rj.key; L.rj.key = L.rj+1.key; L.rj+1.key = temp; /若无交换说明已经有序 if(flag=1) break;四、快速排序int Partition(SqLi
4、st &L,int low,int high) /分割区域函数 L.r0 = L.rlow; int pivotkey = L.rlow.key;/一般将顺序表第一个元素作为支点 while(low high) while(low=pivotkey) high-; L.rlow = L.rhigh; L.rlow.key low+; L.rhigh = L.rlow; L.rlow = L.r0;/返回枢轴位置 return low;void QSort(SqList & /每张子表的快速排序 if(lowhigh) int pivotloc = Partition(L,low,high);
5、QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high);void QuickSort(SqList & QSort(L,1,L.length);五、简单选择排序void SelectSort(SqList & int min; int j; for (int i = 0;L.length; / 选择第i小的记录,并交换 j = i; min = L.ri.key; for (int k = i; k L.length; k+) / 在Ri.n-1中选择最小的记录 if (L.rk.key min) min = L.rk.key ; j = k; if
6、 (i != j) / 与第i个记录交换 int temp = L.ri.key; L.ri.key = L.rj.key; L.rj.key = temp;六、堆排序void HeapAdjust(HeapType &H,int s,int m) /堆调整,将记录调整为小顶堆 RedType rc = H.rs;/暂时存储根结点 for(j=2*s; j=m; j*=2) /沿着结点记录较小的向下筛选 if(jm & H.rj.key= H.rj.key) break; H.rs = H.rj; s = j; H.rs = rc;void HeapSort(HeapType &H) int
7、i; RedType temp; for(i = H.length; i0; -i) HeapAdjust(H,i,H.length); for(i=H.length;1; temp = H.r1; H.r1 = H.ri; H.ri = temp; HeapAdjust(H,1,i-1);(2)遍历函数与初始化void Visit(SqList L) for(int i=1; i+) coutL.ri.key ; coutendl;void InitSqList(SqList &L,int a) L.ri.key = ai;五、测试结果以下是各种界面的测试结果:(1)输入的界面 :(2)排序操作界面:(3)各种排序的结果:六、设计不足以及存在问题本程序是基于C+6.0的实现,其实在设计上的改进可以利用类进行操作,这种类的改进了存储上的不足还可以实现了,对各种的函数基于类的实现,这就是对本程序的改进,这是十分重要的与是改进的基础。本程序出现过的问题是主函数对个函数的调用以及对存储数组的调用上出现了问题,导致排序的结果以及排序的界面出现了问题,的不到实现。后来对算法进行改进,最终把问题得以解决。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1