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(请输入你要排序的元素的个数nscanf(%d,&n);现在开始输入%d个元素n,n);i!=n;ai);mao_pao(a,n);排序后为:n%d ,ai);free(a);2,选择排序法void xuan_zhe(int *a,int n)int i,j,temp,max;max=i;for(j=i+1;n; if(aj=
2、0&tempaj;-j)aj+1=aj;a+j=temp;cha_ru(a,n);4.快速排序void 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)high&aleftlow&aright right-;if(leftlow) kuai_pai(a,low,right);kuai_pai(a,0,n-1);5.shell排序void shell(int *a,int n)int gap,i,j,t
3、emp;for(gap=n/2;gap0;gap=gap/2)for(i=gap;i+)for(j=i-gap;ajaj+gap;j=j-gap)temp=aj;aj=aj+gap;aj+gap=temp;shell(a,n);6.二路归并排序void 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: i=l1; j=l2; while(i=u1&=u2) if(ai=aj) bl+=ai+; else bl+=aj
4、+;=u1) while(j l1=u2+1;for(i=l1; bl+=ai;int *a,*b,i,n,k=1;b=(int *)malloc(100);if(NULL=b)while(kgui_bin(a,b,k,n); ai=bi;k=k*2;free(b);7.堆排序思想是,跟节点都比他们的儿子节点都大,之后从第一个非叶子节点开始到最上的跟节点,依次求其的跟节点,最上的根节点就是值最大的点,这样取得最大值之后,继续求根节点,就能得到一个有序序列。这里要数以的是因为所有节点都在数组里保存,又因为数组的下标是从0开始的,因此跟节点i对应的叶子节点就是,2*I+1和2*I+2,而第一个非叶
5、子节点是(n-2)/2.void dui_paixue(int *a,int n,int m)int i,j,l,temp;i=m;j=2*i+1;while(jif(jaj j+;if(aj=0;i-)dui_paixue(a, n, i);int *a,*b,i,j,temp,n,k=1;dui(a,n);for(j=n-1; temp=a0; a0=aj; aj=temp; dui_paixue( a, j, 0);8.基数排序(我写的这个基数排序可能效率有点低,也肯能有点小BUG,等着以后改进吧)#define max 10int p1010;int amax,i,j,m,n,k,count,flag=1,temp;=10; for(j=0;j! pij=-999;请输入你要输入的元素的个数n请输入%d个元素ncount=0;k=ai;while(k0)m=k%10;k=k/10;count+;while(pcountm!=-999)if(pcountmai)temp=pcountm;pcountm=ai;m+;j+) if(pij!,pij);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1