1、且子程序只有在被调用时才会运行大大节约系统资源减少了运算时间。同时由于功能的隔离使得程序的扩展性大大提高,无论程序将要任何改动时,都会方便很多。源代码#includetime.hstdlib.hint a30000;int choice;int choice1;struct xlx int key; int link; aa30000;int aaa300000;void main1();/*直接插入排序函数*/void direct(int a)printf(n现在使用直接插入排序法进行排序:n);int i,j,w; for(i=0;i=0;j-) if(aj=aj+1) w=aj; aj
2、=aj+1; aj+1=w; /*冒泡排序函数*/void bubble_sort(int a) printf(n下面使用冒泡排序法进行排序: int i,j,w; for(j=0;jaj+1) /*选择排序*/void choices_sort(int a) printf(n现在使用选择排序法进行排序: int i,j,k,t; k=i; for(j=i+1; if(akaj) k=j; t=ai; ai=ak; ak=t;/*快速排序*/ quick(int first,int end,int L) int left=first,right=end,key; key=Lfirst; whi
3、le(leftright) while(left=key) right-; if(left Lleft+=Lright; while(left(Lleft left+;right)Lright-=Lleft; Lleft=key; return left;void quick_sort(int L,int first,int end) int split; if(firstend) split=quick(first,end,L); quick_sort(L,first,split-1); quick_sort(L,split+1,end);/*堆排序*/void sift(int *x, i
4、nt n, int s) int t, k, j; t = *(x+s); /*暂存开始元素*/ k = s; /*开始元素下标*/ j = 2*k + 1; /*右子树元素下标*/ while (jn) if (jn-1 & *(x+j) *(x+j+1) /*判断是否满足堆的条件:满足就继续下一轮比较,否则调整。*/ j+; if (t i-) sift(x,n,i); /*初始建堆*/ for (k=n-1; k=1; k-) t = *(x+0); /*堆顶放到最后*/ *(x+0) = *(x+k); sift(x,k,0); /*剩下的数再建堆*/ /*归并排序*/int list
5、merge(struct xlx list,int first,int second)/*递归传递*/int start=30000;while(first!=-1&second!=-1)if(listfirst.key=upper)return lower;elsemiddle=(lower+upper);return listmerge(list,rmerge(list,lower,middle), rmerge(list,middle+1,upper);/*时间计算函数*/void timer(int choice)double t1,t2,t;int i;t1=(double) clo
6、ck();if(choice=1) direct(a);if(choice=2) bubble_sort(a);if(choice=3) choices_sort(a);if(choice=4) n现在使用快速排序法进行排序: quick_sort(a,0,29999);if(choice=5) heap_sort(a,30000);if(choice=6) rmerge(aa,0,29999);t2=(double) clock();t=difftime(t2,t1)/1000;for(i=0;%d ,ai);n排序结束您所用排序时间为:%f秒n,t);/*菜单函数*/void menu(i
7、nt choice1) int i;if (choice1=1)=30000; ai=aaai; aai.key=aaai; main1();if (choice1=2)谢谢使用,再见!/*生成随机数函数*/void sjs() int i=0,j,b,h,l;请输入你所期望的将要生成随机数的取值范围:最小值(不能为负数): scanf(%d,&l);最大值(无上限):h); srand( (int) time(0); b=rand(); if(b=l&b=h) ai=b; aai.key=b; aaai=b; i+; printf(void main1()nn请选择你所希望使用的排序方法:n
8、n1。直接插入排序n2。冒泡排序n3。选择排序n4。快速排序n5。堆排序n6。归并排序nscanf(choice);timer(choice);nn排序完毕,请选择下一步您要完成的工作:nn1.返回选择另一种排序方法排序n2.退出nchoice1);menu(choice1);/*主函数*/void main()sjs();main1(); for (k=n-1; void time(int choice) double t1,t2,t;time(choice);运行结果分析生成30000个随机数选择使用排序算法直接排序排序所用时间冒泡排序所用时间选择排序所用时间快速排序所用时间 堆排序所用时
9、间各排序排序时间分别为:直接排序:3.448秒冒泡排序:3.76秒选择排序:1.575秒快速排序:0.00秒堆排序:0.016秒归并排序:7.487秒(注:此处快速排序并非排序时间为0,而是时间很短在表示范围外,当实验数据扩大到一定数值后会有相应时间显示)通过数据不难看出6种排序方法处理一组相同数据时,快速排序处理速度最快堆排序次之,归并排序最慢。六课设心得整个程序前前后后整整用了一个星期,每天只要有空闲时间就在翻书本,画流程图,写代码,反反复复一点一点。一个星期的编写让我进步不少,心得也不少,但是说实话让我认识最深的是四点,刻骨铭心:对于编程来说看书很重要,但实实在在的动手去编才是王道!任何程序想要写起来不被自己搞晕,就一定要画流程图,省时省事!编程一定养成良好的编程习惯,无论命名还是结构!任何程序算法是灵魂,程序的好坏很大部分取决于算法,只是一组数的排序差别就如此之大,跟别说一个比排序负责多倍的排序!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1