C中冒泡排序法

来源:百度知道 编辑:UC知道 时间:2024/05/12 12:02:43
main()
{
int a[11];
int i,j,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;j++) //这句不明白
for(i=1;1<=10-j;i++) //这句不明白
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i=1]=t;}
printf("number is");
for(i=1;i<11;i++)
printf("%d",a[i]);
}

我理解内两句不明白的话是,当J=1时,i<=10-1 逐个对比

for(j=1;j<=9;j++) 这句是控制一共要比较多少回合
for(i=1;1<=10-j;i++) 这句是每一回合又要比较多少次才能把最大的沉底,
比如说第一回合j=1, i就要进行9次比较才能把最大的数沉底。
一直到j=9,i再比较1次,所有的数就按从小到的的顺序排好了。
还有,你的问题我看的不是太懂,不知道上面说的是不是

问题的分析为:
先拿第一个元素a[1]比较,那么比较的就是a[2]-a[10]
得到的目标元素存入a[10]
再拿第一个元素a[1]再次与a[2]-a[9]比较,
最后得目标元素存入a[9]
....
最后拿a[1]与a[2]比较,得目标元素存入a[2]结束
那么外层循环是:1-9(或是9-1)
内面的循环则是:1-(10-外循环) 或是 外循环
你只要记住,这只是一种方式,只要使用的思想思路是一样的,怎么写都可以!
思路:
把一列数中把目标元素移于 [左边]
然后从头再来,把除已经移到最左边的之,剩下的又再做此操作!那么就是说在每次操作中,操作长度将减少1
也就好比i<=10-j一样,j可以说是你操作的次数,而i是每次操作的长度!
形状如:
I →
J ————————
↓———————
——————
—————
————
———
——