c++中的冒泡排序法在升序的时候必须满足第一个数大于第二个数降序排列的时候必须满足第一个数小与第二个数,不然就会出现错误!!请帮忙解答
如for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
//这应该是按照升序排列数字从小到大,但如果输入1 2 6 5 4 8 9 3 7 出来的结果就不是123456789
能具体解释一下冒泡法吗?
后面的程序不对吧!!会出现跟我一样的错误
for(j=0;ja[j])
{
t=a[i];a[i]=a[j];a[j]=t;
}
这是另外一个人回答的!!
你说的“后面”是指我的代码不对,还是说你贴的这个人的代码不对?如果你真正了解冒泡之所在,你就会得到我那样的循环的。
你贴的那个人的回答,我先不说他结果对不对,我只说他不是冒泡排序
两个都不对啊,我想问下你的冒泡法,i,j之间有什么联系?for(i=0;i<9;i++)
for(j=0;j<9-1;j++)这个地方应该是 for(j=0;j<9-i;j++)吧,我就是不懂冒泡法,才想问问大家的呀~~
i跟j的联系?i是要冒泡的次数=数列的长度,j是冒泡循环的起始位置到终止位置,每次冒泡都要从头开始,到末尾或是‘末尾-i’
‘9-i’是优化后的,原始的是从头到尾。冒泡排序的思想比较相邻两个,给你举个列子吧:
6 3 5 8 2 9 4 原始数据
3 5 6 2 8 4 9 第一次冒泡,9是最大值,沉到了最底下(如果是‘9-i’,以后不比较9了,效率更高些)
3 5 2 6 4 8 9 第二次冒泡,8沉下
3 2 5 4 6 8 9 第三次冒泡,6沉下
2 3 4 5 6 8 9 第四次冒泡 5沉下(其它的排好了是因为恰好,但是还会执行下一次冒泡,只是数据不会换位置了)
2 3 4 5 6 8 9 第五次
2 3 4 5 6 8 9 第六次
2 3 4 5 6 8 9 第七次(结束)
冒泡排序的第二重循环的j要从0变到末尾(优化后是9-i)