黑马程序员技术交流社区

标题: 冒泡排序的问题 [打印本页]

作者: 李深山    时间: 2012-3-18 22:19
标题: 冒泡排序的问题
class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-x;y++)
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                System.out.println(i);
        }
}
为什么总是出现角标越界?
作者: 秦超    时间: 2012-3-18 22:34
第二个for循环的条件应该是 y<arr.length-1-x
作者: 李深山    时间: 2012-3-18 22:35
哦,中啦,谢谢
作者: 四海为家    时间: 2012-3-18 22:53
class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-x;y++)//这句应该是:for(y=0;y<arr.length-x-1;y++)
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                System.out.println(i);
        }
}

作者: 贠(yun)靖    时间: 2012-3-18 22:53
class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-x;y++)  //因为你交换的时候  是y 和y+1 交换   如果控制范围不 减1的话  y+1最后就等于arr.length了  所以就越界
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                System.out.println(i);
        }
}

作者: 刘_浩    时间: 2012-3-18 22:54
你仔细想想当x=6的时候,进行内循环的时候,是不是只有最后两个元素了?那么这个地方还用得着内循环多一次循环吗?多了一次,y++是不是就多增了一次,所以越界。应该是for(y=0;y<arr.length-x-1;y++),你在看看是不是这样的。
作者: a504079589    时间: 2012-3-18 23:16
class   SortDemo2 {

        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-1-x;y++)  //这里要减for(y = 0; y < arr.length - 1 - i; y++)
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                        System.out.println(i);
        }
因为冒泡排序是两个相邻的去比较,找到最大的放在最后,  所以第一次为0号索引到length-2号索引相邻的去比较(数组长度为length-1, 到最后是倒数第二个和最后一个比), 第二次是从0号索引到length-3号索引相邻的去比较(第一次已经找到最大的了, 所以第二次比较出最大的放在倒数第二个位置上)......因为找到最大的放在最后, 所以要第一次比较是length-1,第二次为length-2...... ;
作者: ♂诸侯♂    时间: 2012-3-19 01:20
我运行之后出现的问题是Exception in thread "main" java.lang.NoClassDefFoundError错误
查询后是这个问题。改成classpath后成功
http://user.qzone.qq.com/837678379/blog/1332091002#!app=2我的QQ空间里有这次的收藏知识点分享。希望有用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2