黑马程序员技术交流社区

标题: 这个是冒泡法的思想吗? [打印本页]

作者: 黑马刘岩    时间: 2012-12-2 12:04
标题: 这个是冒泡法的思想吗?
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;
                                 }
                         }
                 }
请问这个是冒泡法的思想吗?如果不是该如何改正?

作者: 李培根    时间: 2012-12-2 12:10
本帖最后由 李培根 于 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;
           }
                              }
                 }


作者: 聽聽我dē❤    时间: 2012-12-2 12:12
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; “一直取的是数组的第一个元素。

作者: 黑马刘岩    时间: 2012-12-2 12:26
聽聽我dē❤ 发表于 2012-12-2 12:12
for(int x=0;x

明白了,多谢!
作者: 郭振遥    时间: 2012-12-2 12:39
弱弱地问下,int temp=args;中的args表示的是数组的首地址吧,而不是数组的第一个元素……
作者: 初艳春    时间: 2012-12-2 12:42
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;
                                  }
                          }
                  }

作者: 黑马刘岩    时间: 2012-12-2 13:48
郭振遥 发表于 2012-12-2 12:39
弱弱地问下,int temp=args;中的args表示的是数组的首地址吧,而不是数组的第一个元素…… ...

args是什么东东?它可以和arr[j]比较吗?
int temp=arr中的arr又是什么?
作者: 林剑    时间: 2012-12-2 14:09
冒泡排序的思想主要是从第一个元素开始每相邻两个元素比较,符合条件则置换,这样一个遍历下来最值就移到数组最末端了,第二次遍历也是从第一个元素开始,但是遍历到倒数第二个元素........
  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:16
林剑 发表于 2012-12-2 14:09
冒泡排序的思想主要是从第一个元素开始每相邻两个元素比较,符合条件则置换,这样一个遍历下来最值就移到数 ...

第一层循环,x<arr.length,是否arr.length应该-1即x<arr.length-1
作者: 林剑    时间: 2012-12-2 15:17
獨〓道‍ 发表于 2012-12-2 14:16
第一层循环,x

对,改成x<arr.length-1更合适,少了一次循环,但x<arr.length也可以编译运行的,没有问题
作者: 杨永胜    时间: 2012-12-2 19:50
冒泡就是相邻两个比较大的后排,那最后一个就定了,依次长度减一,跟气泡上升一样。。。。
作者: 何伟    时间: 2012-12-3 12:39
冒泡排序 的原理就是两个相连角标值相比较,如果符合条件两个值就互换,这样最值(最大或最小)就会出现在数组的最后角标。
作者: 臧立洋    时间: 2012-12-3 22:23
第二行   for(int j=i+1;j<args.length;j++) 改为for(int j=i+1;j<args.length-i-1;j++)




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