| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1463 人关注过本帖
标题:菜鸟关于冒泡法的疑问!
只看楼主 加入收藏
aaaisan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-3-24
收藏
 问题点数:0 回复次数:15 
菜鸟关于冒泡法的疑问!

自学《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")

}

搜索更多相关主题的帖子: 疑问 冒泡 int void 
2006-04-29 14:50
疯狂VC
Rank: 1
等 级:新手上路
威 望:1
帖 子:375
专家分:0
注 册:2006-3-29
收藏
得分:0 
以下是引用aaaisan在2006-4-29 14:50:00的发言:

for(i=0; i<9-j;i++) /* 到这里就乱了,一共应该是有十个数,前面说了,在第J趟比较中要进行N-J次两两比较,此处N应该为10,为什么这里写的是9呢?N代表有多少个数,而不是第几趟呀,脑袋乱乱的,越想越乱…… */


因为i=0开始的啊!

自学!错了勿怪!
我是这样想的


2006-04-29 15:04
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
你把具体的数字代入进去,自己再看看应该比较几趟.

我的原则很简单:不做不喜欢的事!
2006-04-29 15:27
诸神的黄昏
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-4-27
收藏
得分:0 

把程序写出来~自己调试吧~应该学会用编译工具调试
象这些简单的东西边调试边理解就搞得定的~

2006-04-29 19:04
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 

那个是个二维循环
for(j=0;j<9;j++) /* 一重循环*/

for(i=0; i<9-j;i++) /*二重循环,且每次循环都到9-j结束*/

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;


}


努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-04-29 21:40
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
这种东西都是得自己去钻啊
2006-04-30 00:05
iyuohz
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-2-22
收藏
得分:0 

for(j=0;j<9;j++)
for(i=0; i<9-j;i++)
外层j=0时,里层0<=i<=8之间,但是比较的是 a[i]>a[i+1]


如果里层循环写成i=0;i<9;i++ 的话,楼主应该明白吧?
正因为是冒泡,所以 沉底的东西 就不去再考虑它了
因此 只要在 i<9 里面添一个 变量,使得 i<(*) *这里应该是一个递减的
所以 有了 外层循环


2006-04-30 09:15
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

后面是a[i]>a[i+1]!!!!!!!!!!!!!!!!!!!!!!!!!!!


用0-1统治世界!
2006-05-02 01:01
雪花啤酒
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-2
收藏
得分:0 
还是不懂啊
能不能再详细点?
2006-05-02 02:52
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
//楼主朋友,如果这样"冒泡"是否好理解些?
#include<stdio.h>
#define N 10
int main( )
{ int a[N]={1,4,5,8,7,3,2,0,9,6};//N个任意整数
int i,j;
for(i=1;i<=N-1;i++)//第i轮,i=1,2,3,...,N-1
for(j=1;j<=N-i;j++)//第j次,j=1,2,3,...,N-i
if(a[j-1]>a[j])//此处是按升序排列
{int t=a[j-1];a[j-1]=a[j];a[j]=t;}
//至此,排序其实已经完成。俺来看看效果吧:
for(i=0;i<N;i++)printf("%i ",a[i]);
printf("\n");
return 0;
}

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-02 04:38
快速回复:菜鸟关于冒泡法的疑问!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029458 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved