回 帖 发 新 帖 刷新版面

主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!

main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n")
for(j=1;j<=9;j++) //(这句for是什么意思????)
for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)
if(a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
printf("the numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}谢谢各位大虾指教!!!!

回复列表 (共29个回复)

沙发

。。。。怎么又发啦。

板凳

网上有冒泡的flash,很容易理解,你仔细想想呀,就这么回事。

3 楼

楼主的代码是在<<C程序设计>>的数组章里一字不差抄的
书上的解释不错,还需要问吗?

4 楼

for循环语句啊
在循环里面比较大小啊
很容易理解啊

5 楼

说就不好说呀.

6 楼

for(j=1;j<=9;j++) //(这句for是什么意思????)
总共10个数,j=1 是先把第一个最小的数求出来
直到j=9就是求第9个最小的了...剩下的那个是最大的

for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是????)
是求最小的数

i<=10-j是说只比较10-j 次因为前j 个数已经按从小到大的顺序排好了
就是说j=1 时比较9次...求第一个最小的数
      j=8 时比较2次...前7个数已按从小到大排好了 求第8个最小的数
      j=9 时比较1次...就是比较最大的两个数了...
大家看我说的对不对...

7 楼


应该是这样
for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++)
当j=1时,i是从第1个元素到第9个元素比较,最大的放最后
当j=2时,i从第1个元素到第8个元素比较,最大的放最后
.....................
一直到j=9,那么所有元素就是从小到大排列了

8 楼

我怎么看都是求最小植耶...
最先求的是最小值
最后求的是最大值...
是你错了还是我错了...

9 楼

是先求最大的,大的往后放
然后用10-j来缩小范围

10 楼

wohui

我来回复

您尚未登录,请登录后再回复。点此登录或注册