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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刚金波 中级黑马   /  2013-4-15 15:47  /  1306 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刚金波 于 2013-4-17 00:03 编辑

      刚看视频时讲冒泡排序的优化问题,原本冒泡排序是将存放在堆内存中的数组元素的位置进行调换来完成排序,老师说堆内存中数据的调换会使用较多的资源,如果每次只在最后将这次排序的最大值取出与数组最后一位的值交换位置就可以优化冒泡排序。这块听着有些迷糊,哪位同学能帮忙给详细解释下
  1. public static void bubbleSort_1(int[]arr)
  2.         {
  3.                 int temp=arr.length;
  4.                 for(int x=0;x<temp;x++)
  5.                 {
  6.                         for(int y=x;y<temp-1;y++)
  7.                         {
  8.                                 if(arr[y]>arr[y+1])
  9.                                 {
  10.                                         int num=arr[temp-y];
  11.                                         arr[temp-y]=arr[y];
  12.                                         arr[y]=arr[temp-y];
  13.                                 }
  14.                         }
  15.                 }
  16.                 printArr(arr);
  17.         }
复制代码
上面是我自己写的优化后的冒泡排序的实现代码。
我是这么想的,每次外部循环一次,内部循环就就从数组中获取一个最大值并与数组最后一位交换位置,从而避免相邻两个数组之间的调换。
不知道这样做对不对,哪位给看看,给个意见

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
大概意思就是说,定义一个临时容器,把比较后的最大值赋给该容器,然后第一轮比较后把这个容器的值赋给最后一个,依次类推。这样减少了数组内部对换次数。
大概意思就是这个样子了,
回复 使用道具 举报
本帖最后由 沈浩 于 2013-4-15 18:11 编辑

你的思路是没错的
不过你的那个代码不行 还是一样每次都在换位置啊
我写的这个貌似可以   你可以参考哈   仅供参考哦
        public static void bubbleSort(int [] arr)
        {
                int tt=0;
                int num=0;
                for (int x=0;x<arr.length-1 ;x++ )
                {
                        for (int y=0;y<arr.length-1-x ;y++ )
                        {
                                //进行判断把最大的那个数的角标记住
                                if(arr[y]>arr[y+1]& arr[tt]<=arr[y])
                                {
                                        tt=y;                                                
                                }
                                else if(arr[y]<arr[y+1]& arr[tt]<=arr[y+1])
                                {
                                                tt=y+1;                                
                                }        
                        }
                        //判断完后才进行换位
                        num = arr[arr.length-x-1];
                        arr[arr.length-x-1]=arr[tt];
                        arr[tt]=num;
                        tt=0;
                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马