微信营销失败案例:C语言的编程题.....

来源:百度文库 编辑:神马品牌网 时间:2024/05/12 05:35:34
输入20个数,存入a数组,按从小到大排序,输出排序后的数组.(起泡排法)

main()
{ int s[20];
int i;
int r;
int j;
for(i=0;i<20;i++)
{scanf("%d/n",&s[i});}
for(i=0;i<20;i++)
for(j=i;j<20;j++)
{ if(s[i]>s[j])
r=s[i];
s[i]=s[j];
s[j]=r;
}
}

main()
{
int a[20],i,j,t;

for(i=0;i<20;i++)
scanf("%d",&a[i]);

for(i=0;i<20-1;i++)
for(j=i+1;j<20;j++)
{
if(a[i]>a[j])
{
t=a[i];a[i]=a[j];a[j]=t;
}
}
for(i=0;i<20;i++)
printf("%d ",a[i]);
}

楼上的二位虽然正确,但冒泡用的循环次数太多,比如说:对1,3,5,7,8,23,22,34,45,55排序,他还要循环 n*(n-1)次,提示一个方法,通过函数,没冒泡一次记录一下,如果那一次所计数为零,那么可以停止。
我曾经试过,没问题。
程序如下:
#define N 10

exchange(int *p,int *q,int *m)

{int t;

t=*p;*p=*q;*q=t;

(*m)++;}

main()

{int *m,k,i,a[N]={4,2,45,3,21,23,43,34,23,12};

for(k=0;k<N;k++)

{ *m=0;/*"*m"就是我说的计数方法*/

{for(i=0;i<N-1;i++)

if(a[i]>a[i+1])exchange(a+i,a+i+1,&m);}

if(*m==0)break;}

晕~~~