C语言学习知识所有内部排序算法.doc

上传人:小** 文档编号:2538976 上传时间:2020-04-19 格式:DOC 页数:14 大小:153.07KB
返回 下载 相关 举报
C语言学习知识所有内部排序算法.doc_第1页
第1页 / 共14页
C语言学习知识所有内部排序算法.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《C语言学习知识所有内部排序算法.doc》由会员分享,可在线阅读,更多相关《C语言学习知识所有内部排序算法.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、!-C语言 所有内部排序算法 冒泡法,选择法,插入法,快排法,希尔,归并,. 1冒泡法:#include#includevoid mao_pao(int *a,int n)int i,j,temp,flag;for(i=0;in-1&flag;+i)flag=0;for(j=0;jaj+1) flag=1; temp=aj; aj=aj+1; aj+1=temp; void main()int *a,i,n;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);s

2、canf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);mao_pao(a,n);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);2,选择排序法#include#includevoid xuan_zhe(int *a,int n)int i,j,temp,max;for(i=0;in-1;+i)max=i;for(j=i+1;jn;+j) if(ajamax) max=j;if(i!=max)temp=ai;ai=amax;amax=temp

3、;void main()int *a,i,n;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);xuan_zhe(a,n);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);3,插入排序#include#includevoid cha_ru(int *a

4、,int n)int i,j,temp;for(i=0;i=0&tempaj;-j)aj+1=aj;a+j=temp;void main()int *a,i,n;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);cha_ru(a,n);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);pr

5、intf(n);free(a);4.快速排序#include#includevoid kuai_pai(int *a,int low,int high)int left,right,middle,i,j,temp;left=low;right=high;middle=(left+right)/2;while(leftright)while(lefthigh&aleftlow&arightamiddle) right-;if(left=right)temp=aleft;aleft=aright;aright=temp;left+;right-;if(leftlow) kuai_pai(a,low

6、,right);void main()int *a,i,n;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);kuai_pai(a,0,n-1);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);5.shell排序#include#includevoid

7、 shell(int *a,int n)int gap,i,j,temp;for(gap=n/2;gap0;gap=gap/2)for(i=gap;i=0&ajaj+gap;j=j-gap)temp=aj;aj=aj+gap;aj+gap=temp;void main()int *a,i,n;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d

8、,&ai);shell(a,n);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);6.二路归并排序#include#includevoid gui_bin(int *a,int *b,int k,int n)int l1,l2,i,j,u1,u2,l=0;l1=0;while(l1+kn) l2=l1+k; u1=l2-1; u2=(l2+k-1n)?l2+k-1:n-1; i=l1; j=l2; while(i=u1&j=u2) if(ai=aj) bl+=ai+; else bl+=aj+; while(i=u

9、1) bl+=ai+; while(j=u2) bl+=aj+; l1=u2+1;for(i=l1;in;+i) bl+=ai;void main()int *a,*b,i,n,k=1;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);b=(int *)malloc(100);if(NULL=b) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;

10、i!=n;+i)scanf(%d,&ai);while(kn)gui_bin(a,b,k,n);for(i=0;in;+i) ai=bi;k=k*2;printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);free(b);7.堆排序思想是,跟节点都比他们的儿子节点都大,之后从第一个非叶子节点开始到最上的跟节点,依次求其的跟节点,最上的根节点就是值最大的点,这样取得最大值之后,继续求根节点,就能得到一个有序序列。这里要数以的是因为所有节点都在数组里保存,又因为数组的下标是从0开始的,因此跟节点i对应的叶子节点就是,2*I+1

11、和2*I+2,而第一个非叶子节点是(n-2)/2.#include#includevoid dui_paixue(int *a,int n,int m)int i,j,l,temp;i=m;j=2*i+1;temp=ai;while(jn)if(jn-1&ajaj+1) j+;if(aj=0;i-)dui_paixue(a, n, i);void main()int *a,*b,i,j,temp,n,k=1;a=(int *)malloc(100);if(NULL=a) printf(allocation failturen); exit(1);b=(int *)malloc(100);if(

12、NULL=b) printf(allocation failturen); exit(1);printf(请输入你要排序的元素的个数n);scanf(%d,&n);printf(现在开始输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);dui(a,n);for(j=n-1;j=0;-j) temp=a0; a0=aj; aj=temp; dui_paixue( a, j, 0);printf(排序后为:n);for(i=0;i!=n;+i)printf(%d ,ai);printf(n);free(a);free(b);8.基数排序(我写的这个基数排序可能效率

13、有点低,也肯能有点小BUG,等着以后改进吧)#include#include#define max 10void main()int p1010;int amax,i,j,m,n,k,count,flag=1,temp;for(i=0;i!=10;+i) for(j=0;j!=10;+j) pij=-999;printf(请输入你要输入的元素的个数n);scanf(%d,&n);printf(请输入%d个元素n,n);for(i=0;i!=n;+i)scanf(%d,&ai);for(i=0;i!=n;+i)count=0;k=ai;while(k0)m=k%10;k=k/10;count+;while(pcountm!=-999)if(pcountmai)temp=pcountm;pcountm=ai;ai=temp;elsem+;pcountm=ai;for(i=0;i!=10;i+) for(j=0;j!=10;j+) if(pij!=-999) printf(%d ,pij);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁