c++中的冒泡排序法的升序降序

c++中的冒泡排序法在升序的时候必须满足第一个数大于第二个数降序排列的时候必须满足第一个数小与第二个数,不然就会出现错误!!请帮忙解答如for(j=0;j<9;j++)f... 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
能具体解释一下冒泡法吗?
展开
 我来答
lexin_lyl
推荐于2018-04-07 · TA获得超过714个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:469万
展开全部
楼主,你应该说你的程序实现的时候“升序的时候必须满足第一个数大于第二个数降序排列的时候必须满足第一个数小与第二个数,不然就会出现错误”,不要说人家冒泡排序会有这样的漏洞。冒泡排序的思想:比较相邻的两个,按照排序要求进行换位(升序、降序相反)。正确的算法应该是这样的:
for(i=0;i<9;i++)
for(j=0;j<9-1;j++)
if(a[j]>a[j+1])//升序
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
更多追问追答
追问
后面的程序不对吧!!会出现跟我一样的错误
for(j=0;ja[j])
{
t=a[i];a[i]=a[j];a[j]=t;
}
这是另外一个人回答的!!
追答
你说的“后面”是指我的代码不对,还是说你贴的这个人的代码不对?如果你真正了解冒泡之所在,你就会得到我那样的循环的。
你贴的那个人的回答,我先不说他结果对不对,我只说他不是冒泡排序
就在黎明的起点
2011-10-19 · TA获得超过3686个赞
知道大有可为答主
回答量:1249
采纳率:78%
帮助的人:560万
展开全部
你应该是边界处理错了 看你的第二重循环,当j = 0时,第二重循环变成了

for(i = 0; i <9; ++i)
这个时候 ,当循环进行到i = 8时,if中的比较就变成了if(a[8] > a[9])
很明显a[9](数组a有9个元素,应该是a[0]到a[8])越界了,因此会导致错误
所以应该把j的初始赋值变为 j = 1

冒泡法的具体解释,你自己手动执行一遍 就可以理解的很深了 只是看效果不一定很明显
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l109383670
2011-10-19 · TA获得超过419个赞
知道小有建树答主
回答量:222
采纳率:100%
帮助的人:215万
展开全部
void bubble_sort(int *x, int n)   
{   
int j, k, h, t;   
for (h=n-1; h>0; h=k) /*循环到没有比较范围*/   
{   
for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/   
{   
if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/   
{   
t = *(x+j);   *(x+j) = *(x+j+1);   *(x+j+1) = t; /*完成交换*/   
k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/  
 }   
}   
}   
}

仅供参考。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
myfairytail
2011-10-19 · TA获得超过277个赞
知道小有建树答主
回答量:445
采纳率:0%
帮助的人:236万
展开全部
你访问数组时存在越界的情况,将第二个for循环改一下就行了。
for(i=0;i<9-j-1;i++)
冒泡排序,比如升序排序的话,就是第一次把整个数组中最大的数放到最后一个位置,第二次将第二大的数放到倒数第2个位置。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猎人719
2011-10-19 · TA获得超过1320个赞
知道小有建树答主
回答量:1028
采纳率:0%
帮助的人:560万
展开全部
for(j=0;j<8;j++)
for(i=j+1;i<9;i++)///我记得这里好像是这样的吧。不知道错了没有。
if(a[i]>a[j])
{
t=a[i];a[i]=a[j];a[j]=t;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式