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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

fa20091001

初级黑马

  • 黑马币:5

  • 帖子:10

  • 精华:0

本帖最后由 fa20091001 于 2014-4-3 23:06 编辑
  1. 先贴代码:
复制代码
class ArrayTest
{
        public static void main(String[] args)
        {
        int [] arr = {4,5,21,6,41,7,2};
        System.out.print("未排序前:");
        print(arr);
        bubble(arr);
        System.out.print("排序后:");
        print(arr);
        }
        //冒泡排序
        public static void bubble(int [] arr)
        {
        for(int x=0;x<arr.length-1;x++)
                {
                for(int y = x;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;
                                }
                        }
                }
        }
        //遍历
        public static void print(int [] arr)
        {
                System.out.print("[");
                for(int x=0;x<arr.length;x++)
                        {
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]+"]");
                        }
}
}

QQ截图20140403230056.png (1.68 KB, 下载次数: 12)

QQ截图20140403230056.png

10 个回复

倒序浏览
国际惯例,沙发!!
回复 使用道具 举报
fa20091001 发表于 2014-4-3 23:07
国际惯例,沙发!!

classArrayTest
{
        public static void main(String[] args)
        {
        int [] arr = {4,5,21,6,41,7,2};
        System.out.print("未排序前:");
        print(arr);
        bubble(arr);
        System.out.print("排序后:");
        print(arr);
        }
        //冒泡排序
        public static void bubble(int [] arr)
        {
        for(int x=1;x<arr.length;x++)
                {
                for(int y = 0;y<arr.length;y++)
                        {
                        if(arr[y]>arr[x])
                                {
                                int temp =arr[y];
                                arr[y]=arr[x];
                                arr[x]=temp;
                                }
                        }
                }
        }
        //遍历
        public static void print(int [] arr)
        {
                System.out.print("[");
                for(int x=0;x<arr.length;x++)
                        {
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]+"]");
                        }
}
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 张治国 于 2014-4-4 08:09 编辑

同学,这个错误主要是粗心导致的,在嵌套for循环的内循环中 变量  y=0;

public static void bubble(int [] arr)
   {
   for(int x=0;x<arr.length-1;x++)      
           {
           for(int 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;
                           }
                   }
           }
   }

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 alucard 于 2014-4-4 09:01 编辑

同学你还是没有搞清楚冒泡排序,你写的代码y循环的初始值是y=x,应该是y=0,冒泡排序每次都是从第一位开始比较,我给你画个图说明下。


publicstatic void bubbleSort(int[] arr)
      {
           for (int x=0;x<arr.length-1 ;x++ )
           {
                 for (inty=0;y<arr.length-x-1 ;y++ )
                 {
                      int temp;
                      if (arr[y]>arr[y+1])
                      {
                            temp = arr[y];
                            arr[y] = arr[y+1];
                            arr[y+1] = temp;
                      }
                 }
           }
      }

评分

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

查看全部评分

回复 使用道具 举报 1 0
class ArrayTest
{
        public static void main(String[] args)
        {
        int [] arr = {4,5,21,6,41,7,2};
        System.out.print("未排序前:");
        print(arr);
        bubble(arr);
        System.out.print("排序后:");
        print(arr);
        }
        //冒泡排序
        public static void bubble(int [] arr)
        {
        for(int x=0;x<arr.length-1;x++)
                {
                          //for(int y = x;y<arr.length-x-1;y++)         
                          //因为你使用的是冒泡排序,是将相邻的两个值进行比较。也就是将最大值现放在最后。
                          //所以判断条件是 y<arr.length-x-1   每一次循环后,获取的最大值不会参与比较。
                          //y = x 每一次循环后,arr[x-1]的角标不会参与比较。所以会出现错误的结果。要注意啦。
                for(int 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;
                                }
                        }
                }
        }
        //遍历
        public static void print(int [] arr)
        {
                System.out.print("[");
                for(int x=0;x<arr.length;x++)
                        {
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]+"]");
                        }
}
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 2528870651 于 2014-4-4 10:34 编辑

  1. class ArrayTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                         int [] arr = {4,5,21,6,41,7,2};
  6.                         System.out.print("未排序前:");
  7.                         print(arr);
  8.                         bubble(arr);
  9.                         System.out.print("排序后:");
  10.                         print(arr);
  11.         }
  12.         //冒泡排序
  13.         public static void bubble(int [] arr)
  14.         {
  15.         for(int x=0;x<arr.length-1;x++)
  16.                         {
  17.                                 for(int y = 0;y<arr.length-x-1;y++)   
  18.                                 //这里把y=x 改成y=0,你是比较arr[y]和arr[y+1],不管x的事,不要把x赋给y
  19.                                         {
  20.                                                 if(arr[y]>arr[y+1])
  21.                                                                 {
  22.                                                                         int temp =arr[y];
  23.                                                                         arr[y]=arr[y+1];
  24.                                                                         arr[y+1]=temp;
  25.                                                                 }
  26.                                         }
  27.                         }
  28.         }
  29.         //遍历
  30.         public static void print(int [] arr)
  31.         {
  32.                 System.out.print("[");
  33.                 for(int x=0;x<arr.length;x++)
  34.                         {
  35.                         if(x!=arr.length-1)
  36.                                 System.out.print(arr[x]+",");
  37.                         else
  38.                                 System.out.println(arr[x]+"]");
  39.                         }
  40. }
  41. }
复制代码


评分

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

查看全部评分

回复 使用道具 举报
楼上都是高手,我就不说了!
楼主,技术分借用一下啊!!
回复 使用道具 举报

谢谢你,非常感谢!你的问题完美的解决了我。
回复 使用道具 举报
alucard 发表于 2014-4-4 08:55
同学你还是没有搞清楚冒泡排序,你写的代码y循环的初始值是y=x,应该是y=0,冒泡排序每次都是从第一位开始 ...

哦,是的谢谢你啦!非常感谢。是我太粗心啦!
回复 使用道具 举报
lwy0319 发表于 2014-4-4 02:04
classArrayTest
{
        public static void main(String[] args)

谢谢你的热心回答,是我太粗心啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马