黑马程序员技术交流社区

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

作者: 执剑、砍人    时间: 2015-6-7 06:52
标题: 冒泡排序遇到的问题
public class BubbleDemo {
        public static void main(String[] args) {
                int[] arr = { 3, 4, 9, 2, 5 };// 定义一个数组
                //打印数组
                for (int x = 0; x < arr.length; x++) {
                        System.out.print(arr[x]);
                }
                System.out.println("--------------------");
                array(arr);//定义排序功能
                //讲排玩序后的数组打印
                for (int y = 0; y < arr.length; y++) {
                        System.out.print(arr[y]);
                }
               
        }
        public static void array(int[] arr){
        // 进行arr.length-1次的轮的从前到后的比较
                        for (int i = 0; i < arr.length - 1; i++) {
                                // 讲少数组相邻的两个数比较,大的往后放
                                for (int j = 0; j < arr.length-1-i; j++) {
                                        if (arr[j] > arr[j++]) {
                                                int temp = arr[j];
                                                arr[j] = arr[j+1];
                                                arr[j+1] = temp;
                                        }       
                                }
                        }
        }
}
输出的结果都是原数组,方法没有用
作者: 邱石    时间: 2015-6-7 07:16
  1. public static void array(int[] arr) {
  2.                 // 进行arr.length-1次的轮的从前到后的比较
  3.                 for (int i = 0; i < arr.length - 1; i++) {
  4.                         // 讲少数组相邻的两个数比较,大的往后放
  5.                         for (int j = 0; j < arr.length - 1 - i; j++) {
  6.                                 if (arr[j] > arr[j+1]) {//问题出在这里,比较的时候不能用arr[j]和arr[j++]比较
  7.                                         int temp = arr[j];
  8.                                         arr[j] = arr[j + 1];
  9.                                         arr[j + 1] = temp;
  10.                                 }
  11.                         }
  12.                 }
  13.         }
复制代码

-------------------------------------------------
if (arr[j] > arr[j+1]) {//问题出在这里,比较的时候不能用arr[j]和arr[j++]比较
因为j++是先应用后加加,你这里的arr[j]>arr[j++]就相当于arr[j]>arr[j].
所以把arr[j]和arr[j++]中的arr[j++]改成arr[j+1]就行了。

作者: 开弓没有回头箭    时间: 2015-6-7 08:45
2楼正解
作者: qq479470741    时间: 2015-6-7 08:51
比较的时候是数组前一个和数组后一个比,而你用j++就是就是自己和自己比了,因为j++是先赋值后++。
作者: 老徐    时间: 2015-6-7 10:37
顶贴,大家都好努力啊
作者: meng12    时间: 2015-6-7 12:49
if (arr[j] > arr[j++])    是把y角标和y+1角标进行比较,不是和y++,
而且++放到右边是先运算在自增,++放在左边是先自增在运算。
作者: 痞子刘忙    时间: 2015-6-7 13:12
if (arr[j] > arr[j++]) 这个的问题,学习了
作者: storer    时间: 2015-6-7 13:24
就是上面说的问题。。学习了
作者: storer    时间: 2015-6-7 13:27
就是上面说的问题。。学习了
作者: qian0217wei    时间: 2015-6-7 13:32
改成++j就不会有这个问题了
作者: 武汉小菜鸟    时间: 2015-6-7 15:10
   if (arr[j] > arr[j++]) 这句有错
作者: wwb1105    时间: 2015-6-7 15:49
楼上大神多  学习了
作者: 付欢    时间: 2015-6-7 16:14
你的J++还是没有理解透彻啊




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