为什么这个只是排序了一次?代码在for循环是怎么运行的? 20

intdata[]=newint[]{8,9,0,2,3,5,10,7,6,1};inttemp;for(inty=0;y<data.length-1;y++){if(d... int data[]=new int[] {8,9,0,2,3,5,10,7,6,1};
int temp;
for(int y=0;y<data.length-1;y++) {
if(data[y]>data[y+1]) { //前大于后,交换
temp=data[y+1];
data[y+1]=data[y];
data[y]=temp;
}
}
展开
 我来答
紫薇参星
科技发烧友

2021-08-26 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3547万
展开全部

因为冒泡排序是双层for循环,你只有一层for循环,所以结果是只对相邻的元素进行了一遍比较交换就结束了.

冒泡排序是先对整个数组相邻的元素进行了一遍比较交换,最大值在最后一个元素,

以后依次对比上一次少一个元素(上次的最后一个元素)的数组元素进行比较交换,

最后,直到第一个和第二个元素进行比较交换完成,形成排好序的数组,所以要双层for循环.

改好的完整的java程序如下(改动的地方见注释)

pieryon
2021-08-26 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166864
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
这是一重循环,做了data.length次循环,这一轮循环完,接着进行第二轮的话,就要再写一轮循环。
for(int y=0;y<data.length-1;y++) {
for(int z=0;z<data.length-i-1;z++){
if(data[y]>data[z]) { //前大于后,交换
temp=data[y];
data[y]=data[z];
data[z]=temp;
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
银夜明4
2021-08-26 · 超过10用户采纳过TA的回答
知道答主
回答量:113
采纳率:20%
帮助的人:9.4万
展开全部
  1. 这个for循环只是循环了一遍,左右只能进行一次交换,就比如一个简单的例子{4,2,3,1}  第一次是4和2交换变成了{2,4,3,1},然后就是4和3比较,交换变成了{2,3,4,1}再然后就是4和1比较,交换变成了{2,3,1,4}循环结束,但是1只是交换了一次。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式