为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

c语言排序算法大集合可整体运行

2013-03-12 4页 doc 16KB 18阅读

用户头像

is_878547

暂无简介

举报
c语言排序算法大集合可整体运行#include<stdio.h>#include<malloc.h>voidmain(){ inta[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intb[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intc[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intd[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; inte[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intf[10]={3,-1,2,...
c语言排序算法大集合可整体运行
#include<stdio.h>#include<malloc.h>voidmain(){ inta[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intb[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intc[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intd[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; inte[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intf[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; intg[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; inth[10]={3,-1,2,5,6,2,-6,-5,-10,-9}; voidinsert_sort(int*a,intn); voidshell_sort(int*a,intn); voidbubble_sort(int*a,intn); voidquick_sort(int*a,intlow,inthigh); voidmerge_sort(int*a,intlow,inthigh); printf("排序前结果:\n"); for(inti=0;i<10;i++) printf("%d",a[i]); printf("\n"); puts("直接插入排序后结果:"); insert_sort(a,10); for(i=0;i<10;i++) printf("%d",a[i]); printf("\n"); puts("希尔排序后结果:"); shell_sort(b,10); for(i=0;i<10;i++) printf("%d",b[i]); printf("\n"); puts("冒泡排序后结果:"); bubble_sort(c,10); for(i=0;i<10;i++) printf("%d",c[i]); printf("\n"); puts("快速排序后结果:"); quick_sort(d,0,9); for(i=0;i<10;i++) printf("%d",d[i]); printf("\n"); puts("选择排序后结果:"); quick_sort(e,0,9); for(i=0;i<10;i++) printf("%d",e[i]); printf("\n"); puts("归并排序后结果:"); merge_sort(f,0,9); for(i=0;i<10;i++) printf("%d",e[i]); printf("\n");}voidinsert_sort(int*a,intn){//直接插入排序 for(inti=1;i<n;i++){ intt=*(a+i); for(intj=i-1;j>=0&&t<*(a+j);j--){ *(a+j+1)=*(a+j); } *(a+j+1)=t; } }voidshell_sort(int*a,intn){ inti,j,h,temp;//h为增量,如第一次是5,分成5组各自排序,第二次是2,分成2组, for(h=n/2;h>=1;h/=2){ printf("%d\n",h); for(i=h;i<n;i++){ for(j=i-h;j>=0&&*(a+j)>*(a+j+h);j-=h){//注意永远是两个元素比较,例如第0,3比较,建议观看网上的希尔排序舞蹈 temp=*(a+j); *(a+j)=*(a+j+h); *(a+j+h)=temp; } } }}voidbubble_sort(int*a,intn){ for(inti=0;i<n;i++){ for(intj=0;j<n-i-1;j++){//注意判断条件 inttemp; if(*(a+j)>*(a+j+1)){ temp=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=temp; } } }}intchoosepivot(int*a,intlow,inthigh){//快速排序基准值选择intpivot=*(a+low); while(low<high){ while(low<high&&*(a+high)>pivot) high--; if(low<high){ *(a+low)=*(a+high); low++; // } while(low<high&&*(a+low)<pivot)//pivot现在已经改变注意 low++; if(low<high){ *(a+high)=*(a+low); high--; // } } *(a+low)=pivot;// printf("%d\n",low); returnlow;}voidquick_sort(int*a,intlow,inthigh){//快速排序 intpivot; if(low<high){ pivot=choosepivot(a,low,high); quick_sort(a,low,pivot-1); quick_sort(a,pivot+1,high); }}voidselect_sort(int*a,intn){ inttemp; for(inti=0;i<n;i++){ for(intj=i+1;j<n;j++){ if(*(a+i)>*(a+j)){ temp=*(a+j); *(a+j)=*(a+i); *(a+i)=temp; } } }}//堆排序没心情写。。。。voidmerge(int*a,intlow,intmid,inthigh){//将两个序列归并 inti=low,j=mid+1,p=0; int*R1=(int*)malloc((high-low+1)*sizeof(int)); if(!R1){ puts("申请空间失败"); return; } while(i<=mid&&j<=high) R1[p++]=(*(a+i)<=*(a+j))?a[i++]:a[j++]; while(i<=mid) R1[p++]=a[i++]; while(j<=high) R1[p++]=a[j++]; for(p=0,i=low;i<=high;p++,i++) *(a+i)=*(R1+p);}voidmerge_sort(int*a,intlow,inthigh){//归并排序递归调用 intmid; if(low<high){ mid=(low+high)/2; merge_sort(a,low,mid); merge_sort(a,mid+1,high); merge(a,low,mid,high); }}
/
本文档为【c语言排序算法大集合可整体运行】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索