A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李振乐 中级黑马   /  2014-11-11 17:07  /  1400 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package Every;

public class LianXi {

        public static void main(String[] args) {
                int[] arr = new int[]{22,33,2,344,4,555,333,21,5,8};
               
                for(int x=0;x<arr.length-1;x++)
                {
                        for(int y=x;y<arr.length-1-x;y++)
                        {
                                if(arr[y]>arr[y+1])
                                {
                                        int temp=arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y+1]=temp;
                                }
                        }
                }
                System.out.print("[");
                for(int x = 0;x<arr.length;x++)
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.print(arr[x]+"]");;
               
        }

}
运行结果:::
[22,2,4,21,5,8,33,333,344,555]

评分

参与人数 1技术分 +1 收起 理由
MVP + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 冥夜 于 2014-11-11 17:40 编辑

题目要求都没说要我们怎么帮你。。你是想对数组排序?

点评

是啊。。。很简单的冒泡。。。怎么一直出错?  发表于 2014-11-11 18:14
回复 使用道具 举报
内循环 y的初值应该是0..................
回复 使用道具 举报
for (int y = 0; y < arr.length - 1 - x; y++)
每排一趟,都要从第一个元素开始
回复 使用道具 举报
冒泡排序,如果内循环里的判断语句是if(arr[y]>arr[y+1])调换两元素位置,那么内循环的y的起始数从0开始,y<arr.length-1-x;
如果内循环里判断语句是if(arr[y]<arr[y+1]),那么内循环y的起始数从x开始,到x<arr.length-1,你把这两种情况混淆了

评分

参与人数 1黑马币 +2 收起 理由
MVP + 2

查看全部评分

回复 使用道具 举报
DamonZh 来自手机 中级黑马 2014-11-12 14:29:02
地板
内部的for从0开始 每比较一遍 从头开始再比较的
回复 使用道具 举报
for(y=0;y<arr.length-1-x;y++)
回复 使用道具 举报
昨天刚学到这个。。。

感觉2L说的对的。因为y初始值为x的话外循环第二圈的时候y就变成1,这样的话内循环中的0位置角标就不能进行运算了。
回复 使用道具 举报
内循环应该从0开始
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马