class Test33 {
   static void  s(int b[ ], int k) {
      int i,j,t;
     for(i = 1;i< k; i++){
       for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
        b[j+l]=b[j];
        b[j+1]=t;
                   }
              }
        public static void main(String []args){
          int i, a[]={6, 12, 7, 11, 5 };
          s(a,5);
       for(i=0;i<a.length; i++) 
          System.out.print(a[i]+" ");
          System.out.Println();
               }
         } 我是新手for(i = 1;i< k; i++){
       for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
        b[j+l]=b[j];
        b[j+1]=t;
                   }
              }
这段程序看了好久没看懂希望好心人 详细解答

解决方案 »

  1.   

    这个程序它写错了。在这段可以体现的出 for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
      b[j+l]=b[j];
    当第一次循环时,b[j+l] 是第零个元素,这是可以的。但b[j]就变成第-1个元素了。运行的话 肯定报数组越界异常(ArrayIndexOutOfBoundsException )
      

  2.   

    //这个是双重循环 
    for(i = 1;i< k; i++){     //这个是外层循环 是标准的循环语句
        //内层循环 
        //t=b[i],  给t赋值
        //j=i-1  给j赋值 作为循环的判断变量
        // j>=0 && t<b[j]  循环的条件  
       for(t=b[i], j=i-1; j>=0 && t<b[j];j--)    
          b[j+l]=b[j];
          b[j+1]=t;
      }
    }
    其实上面的内层循环可以写成
       t=b[i];for(j = i-1; j > = 0; j--){
      //先给t赋值
      if(t<b[j]){
         b[j+l]=b[j];
          b[j+1]=t;
      }else{
        black;
      }
    }
      

  3.   

    //这个是双重循环   
    for(i   =   1;i <   k;   i++){           //这个是外层循环   是标准的循环语句 
            //内层循环   
            //t=b[i],     给t赋值 
            //j=i-1     给j赋值   作为循环的判断变量 
            //   j> =0   &&   t <b[j]     循环的条件     
          for(t=b[i],   j=i-1;   j> =0   &&   t <b[j];j--)         
                b[j+l]=b[j]; 
                b[j+1]=t; 
        } 

    其实上面的内层循环可以写成 
          t=b[i]; for(j   =   i-1;   j   >   =   0;   j--){ 
        //先给t赋值 
        if(t <b[j]){ 
              b[j+l]=b[j]; 
                b[j+1]=t; 
        }else{ 
            black; 
        } 

          这里是不是应该这样啊加上大括号 for(t=b[i],   j=i-1;   j> =0   &&   t <b[j];j--)         
                                      { b[j+l]=b[j]; 
                                        b[j+1]=t;
                                       } 
      

  4.   

    for(i = 1;i< k; i++){
      for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
      b[j+l]=b[j];
      b[j+1]=t;
      }
      }
    实际上就是排序,对于int i, a[]={6, 12, 7, 11, 5 };
    第一次t = 12,j = 0 b[0] = 6,因为t > b[j]所以不做任何事,在内层for循环结束时为b[1]赋值,b[1] = t = 12
    第二次 t = 7,j = 1,b[1] = 12,t < b[1],所以b[2] = b[1] = 12,j--;
    j = 0时,t = 7,b[0] = 6,t > b[0],所以不做任何事,在内层for循环结束时为b[1]赋值,b[1] = t = 7
    后面同理。
    这相当于选择排序
      

  5.   

    class Test33 {
      static void s(int b[ ], int k) {
      int i,j,t;
      for(i = 1;i< k; i++){
      for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
      b[j+l]=b[j];
      b[j]=t;
      }
      }
      public static void main(String []args){
      int i, a[]={6, 12, 7, 11, 5 };
      s(a,5);
      for(i=0;i<a.length; i++)  
      System.out.print(a[i]+" ");
      System.out.Println();
      }
      }
    不好意思  我对上面的源代码更正一下 这个才是对的
      

  6.   

     public static void main(String[] args) {
     int  b[]={6, 12, 7, 11, 5 };
      int i,j,t;
      for(i = 1;i< 5; i++){
      for(t=b[i], j=i-1; j>=0 && t<b[j];j--){
      b[j+1]=b[j];
      b[j]=t;
      }
      }
      for(i=0;i<b.length; i++)  
      System.out.print(b[i]+" ");
    }