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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马刘岩 中级黑马   /  2012-12-2 12:04  /  2314 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

for(int i=0;i<args.length-1;i++){
                         for(int j=i+1;j<args.length;j++){
                                if (args>args[j]){
                                         int temp=args;
                                         args=args[j];
                                         args[j]=temp;
                                 }
                         }
                 }
请问这个是冒泡法的思想吗?如果不是该如何改正?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

12 个回复

倒序浏览
本帖最后由 李培根 于 2012-12-2 12:17 编辑

for(int i=0;i<args.length-1;i++){
                              for(int j=i+1;j<args.length-1-i;j++){//{//-1避免角标越界        -i为了外循环增加一次内循环参与比较的元素个数递减
            if (args[j]>args[j+1]){//这里符合条件就换位置
                  int temp=args[j];// args[j]和args[j+1]置换位置
                 args[j]=args[j+1];
                 args[j+1]=temp;
           }
                              }
                 }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
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;
                                }
                        }
                }
在替换时,被替换的元素要是变化的,你的这个“int temp=args; “一直取的是数组的第一个元素。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
聽聽我dē❤ 发表于 2012-12-2 12:12
for(int x=0;x

明白了,多谢!
回复 使用道具 举报
弱弱地问下,int temp=args;中的args表示的是数组的首地址吧,而不是数组的第一个元素……
回复 使用道具 举报
for(int i=0;i<arr.length-1;i++){
                          for(int j=i+1;j<arr.length-x-1;j++){//避免数组越界。
                                 if (args>arr[j]){
                                          int temp=arr;
                                          arr=arr[j];
                                          arr[j]=temp;
                                  }
                          }
                  }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
郭振遥 发表于 2012-12-2 12:39
弱弱地问下,int temp=args;中的args表示的是数组的首地址吧,而不是数组的第一个元素…… ...

args是什么东东?它可以和arr[j]比较吗?
int temp=arr中的arr又是什么?
回复 使用道具 举报
林剑 中级黑马 2012-12-2 14:09:25
8#
冒泡排序的思想主要是从第一个元素开始每相邻两个元素比较,符合条件则置换,这样一个遍历下来最值就移到数组最末端了,第二次遍历也是从第一个元素开始,但是遍历到倒数第二个元素........
  1.         public static void bubbleSort(int[] arr)
  2.         {
  3.                 for (int x = 0;x<arr.length ;x++ )
  4.                 {
  5.                         for (int y = 0;y<arr.length-x-1 ;y++ )//-x控制循环次数,-1避免数组越界
  6.                         {       
  7.                                 if(arr[y]>arr[y+1])
  8.                                 swap(arr,y,y+1);
  9.                         }
  10.                 }
  11.         }
复制代码
回复 使用道具 举报
林剑 发表于 2012-12-2 14:09
冒泡排序的思想主要是从第一个元素开始每相邻两个元素比较,符合条件则置换,这样一个遍历下来最值就移到数 ...

第一层循环,x<arr.length,是否arr.length应该-1即x<arr.length-1
回复 使用道具 举报
獨〓道‍ 发表于 2012-12-2 14:16
第一层循环,x

对,改成x<arr.length-1更合适,少了一次循环,但x<arr.length也可以编译运行的,没有问题
回复 使用道具 举报
冒泡就是相邻两个比较大的后排,那最后一个就定了,依次长度减一,跟气泡上升一样。。。。
回复 使用道具 举报
冒泡排序 的原理就是两个相连角标值相比较,如果符合条件两个值就互换,这样最值(最大或最小)就会出现在数组的最后角标。
回复 使用道具 举报
第二行   for(int j=i+1;j<args.length;j++) 改为for(int j=i+1;j<args.length-i-1;j++)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马