鲁西尿素今日价格报价:问一个关于冒泡算法的问题

来源:百度文库 编辑:高校问答 时间:2024/05/05 07:17:13
如果定义了 int i,j,stem,a[10]={5,2,10,28,36,1,6,7,77,21};
那么我用冒泡算法给这个数组里的组字按升序排列,是不是应该这样写:
For (i=0,i<9,i++)
for (j=i+1,j<10,j++)
if (a[i]>a[j])
{stemp=a[i];a[i]=a[j];a[j]=stem;)
我的问题是上面那两个循环我总搞不清楚,虽然我看过书上说外循环是控制趟次,内循环控制每一趟比较的次数。不知我上面这样写对不?请各位高手指教。
是的,我那个)号是手误写错,其实我一直是用这种算法去做题的,但我最近回想时,好像总有点疑惑,按这样循环嵌套,当I=0时,j=1,可是j<10,就是要说j<10后,才跳出循环,i才会变成1;这样的话,在外循环第一趟i=0时,内循环的j要从1-9不断的和a[0]做比较,好像不对啊,泡冒法是相邻两数比较,按我这样做法就变成了a[0]要和a[1到9]全比较完了,i才会变成1啊。。。好困惑。
当i做一次变动时,j的这个内循环嵌套应该要循环10-i次循环,和i的值进行比较,那不就说i每变动一次值,j都要10-i逐个和a[i]这个数比较,怎么会这样?

是对的,两个循环的作用是这样的,里面的循环是用来比较当前a[i]位置与其它它的是否不同的,假设第一次外循环,数组里共有N个元素,那么,第一次,内循环就要比较N-1次,比较完了以后,数组里的第一个元素是不是确定了,这样,外循环又开始第二个元素的比较......冒泡算法是排序算法里面最常用到的,不错,好好研究,有问题,互相学习.

For (i=0,i<9,i++)
for (j=i+1,j<10,j++)
if (a[i]>a[j]) ;
{stemp=a[i];a[i]=a[j];a[j]=stem;}!
你看你一下!这样对不对呀!就是几个分号吧!在这里是很容易犯错误了!我当时就是在这里经常出错的!你要小心!

for (i=0,i<9,i++){
for (j=i+1,j<10,j++){
if (a[i]>a[j]){
stem=a[i];
a[i]=a[j];
a[j]=stem;
}
}
}

是对的,不过中间少了几个标点,把它补上。还有就是最后一行的括弧打错了。