东营到上海机票多少钱:C语言的编程题.....
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;}
晕~~~