菜鸟关于冒泡法的疑问!
自学《C程序设计》刚学到数组,在书中有一道例题:
用冒泡法对10个数进行比较(由大到小)
前面的讲解中说:“如果有N个数,要进行N-1趟比较,在第1趟比较中要进行N-1次两两比较,在第J趟比较中要进行N-J次两两比较”
自己画了几次图以后大概明白了这个方法,但是看到后面给出的程序以后脑袋全乱了……
程序如下:
#include <stdio.h>
void main()
{
int a[10];
int i, j, t;
printf("input 10 numbers:\n");
for (i=0; i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++) /* 这里还大概能想清楚,0是第一趟,9是第十趟*/
for(i=0; i<9-j;i++) /* 到这里就乱了,一共应该是有十个数,前面说了,在第J趟比较中要进行N-J次两两比较,此处N应该为10,为什么这里写的是9呢?N代表有多少个数,而不是第几趟呀,脑袋乱乱的,越想越乱…… */
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n")
}