排序算法实现3.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《排序算法实现3.docx》由会员分享,可在线阅读,更多相关《排序算法实现3.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院数据结构与算法课程设计成果报告排序算法实现2014年12月29日2.4程序流程图开始开始显示菜单直接插入排序输入序号V折半插入排序简单项选择择排序按输入序号输出结果结束图1-2程序执行流程图开始执行后,会出现提示语句,提示6分别代表6种排序方法,对于生成 的数组,点击1-6任意数字,调用相应的排序方法进行排序。输出结果后,按任 意键结束。2. 5程序测试说明主函数会调用rand()方法,随机产生指定数目数值。并将数值赋予指定数 组,通过提示语句输入16数值,16分别代表不同的排序方式,当输入数字 1时,通过switch语句,将执行直接插入排序函数,然后通过输出函数,输出 所需结构。
2、3程序清单#include#include#includettdefine MAXE 20000typedef int KeyType;typedef struct/*记录类型*/(KeyType key;/*关键字项*/InfoType data;/*其他数据项,类型为 InfoTypeV RecType;void InsertSort(RecType R, int length);直接插入排序void BlnsertSort (RecType R, int low, int high, int length);折半插入排序 void ShellSort (RecType R, int n)
3、;希尔排序 void bubble_sort(RecType R, int length);起泡排序 int FindPos(RecType R, int low, int high);void Quicksort(RecType R,int low, int high);int SelectMinKey(RecType R, int i, int length);void SelectSort (RecType R, int length);简单项选择择排序void showSort (RecType R);快速排序void showSort F(RecType R);int main(vo
4、id) int val;int i;RecType RMAXE;srand (unsigned)time(NULL);for(i=0;i=10;i+)Ri. key= (rand()%100+l);printf(产生的随机数序列为:); for(i=0;i=10;i+)printf(%3d,Ri. key);printf (n);printf (随机输入1到6数字:); scanf(%d,&val);switch(val)case 1: InsertSort (R,10);printf(随机数经直接插入排序后:); showSort(R);break;case 2:BlnsertSort(R,
5、 1, 10, 10);printf (随机数经折半插入排序后:); showSort(R);break:case 3:ShellSort(R, 10);printf(随机数经希尔插入排序后:); showSort_F(R);break;case 4:bubble_sort(R, 10);printf (随机数经起泡排序后:); showSort_F(R);break;case 5:Quicksort(R, 0, 9);printf(随机数经快速排序后:); showSortF(R);case 6:SelectSort(R, 10);printf (随机数经简单项选择择排序后:); showS
6、ort_F(R);)return 0;void InsertSort(RecType R, int length) /对数组a作直接插入排序int i, j;for(i=2;i=length;+i)if (Ri. keyRi-l. key) / 需将 ai插入有序子表(R0. key=Ri. key; / 复制为哨兵Ri. key=RiT. key;for(j=i-2;R0. keyRj. key:j)Rj+1. key=Rj. key; / 记录后移Rj+1. key=R0. key; / 插入到正确位置void BlnsertSort (RecType R, int low, int hi
7、gh, int length) (int m;for ( int i=2; i=length; +i )(R0.key = REiLkey; / 将 Ri暂存到 R0low = 1;high = i-1;while ( low = high) 在Rlow. high中折半查找插入的位置m = (low+high)/2;/ 折半if (R0.key =high+l; j )Rj+1. key = Rj. key; / 记录后移REhigh+1. key = R0. key; / 插入 / BlnsertSort void ShellSort (RecType R, int n) /*希尔排序算法
8、*/ (int i, j, d, k;RecType temp;d=n/2;/*d 取初值 n/2*/while (d0) (for (i=d; i=0 & Rj. keyRj+d. key) (temp=Rj ;与 Rj+d交换*/Rj= Rj+d;Rj+d=temp;j二j-d;printf (,zd=%d: , d) ; /*输出每一趟的排序结果*/for (k=0;kn;k+)printf(3d,Rk.key);printf (n);d=d/2;/*递减增量d*/)void bubble_sort (RecType R, int length) /将a中整数序列重新排列成自小至大有序的
9、整数序歹U (起泡排序) int i, j, t;for(i=0;ilength-l;i+)(for(j=i+l;jRj. key)t=Ri. key;10Ri.key=Rj. key;Rj. key=t;)void Quicksort (RecType R, int low, int high)(int pos;if(lowhigh)pos=FindPos(R, low, high);Quicksort(R, low, pos-l);Quicksort(R, pos+1, high);)int FindPos (RecType R, int low, int high)(int val=Rl
10、ow. key;while(lowhigh)while(low=val)high;Rlow. key=Rhigh.key;while(1owhigh&R1ow. key=val) +low;Rhigh. key=Rlow, key;)Rlow, key=val;return high;)int SelectMinKey(RecType R, int i, int length) /返回在ai.length中key最小的记录的序号 int min;int j,k;k=i; /设第i个为最小 min=Ri. key;for(j=i+l;jlength;j+)if (Rj. keymin) / 找到
11、更小的(k二 j;min=Rj. key;return k;11void SelectSort (RecType R, int length) /对数组a作简单项选择择排序int i, j;int t;for(i=0;ilength-l;+i) /选择第i小的记录,并交换到位j=SelectMinKey (R, i, length) ; / 在 ai. . length中选择最小的记录 if(i!=j)与第i个记录交换t=Ri.key;Ri. key=Rj. key;Rjkey=t;void showSort(RecType R)(int i;for(i=l;i=10;i+) printf (
12、,z%d,z, RiL key);)printf (n);void showSort_F(RecType R)(int i;for(i=0;i10;i+) printf (z,%d z,, Ri. key);)printf (n);124测试4.1测试数据由函数rand()产生的随机数进行测试。4. 2测试结果分析79 52 24 21 54 9 4 46 39 83 28陋圳输入1期数字:1型机数经直接插入排序后:4 9 21 24 28 39 46 52 54 83Press any key to continue图-3直接插入排序当输入数字1时,主函数通过switch语句调用直接插入排序
13、,对数组进行 从小到大的排序。产生的随机数序列为:50 65 90 28 95 47 94 26 45 13 52 遁物颉人工到6数多4遁机数经起泡排序后:13 26 28 45 47 50 65 90 94 95Press any key to continue图1-4冒泡排序当输入数字4时,主函数通过switch语句调用冒泡排序,对数组进行从小 到大的排序。135总结通过这次课程设计的学习让我学会了许多,让我对专业知识有了初步的了 解。在这次课程设计中,首先实现随机数的生成,将生成的指定数目的随机数一 一对应的赋予定义的空数组,经选择语句分别执行直接插入排序,折半插入排序, 希尔排序,起泡
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 算法 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内