if(changeFlag)
           {
               for(  m = 0; m < mSort.maxLen; m ++ )
                 {
                    System.out.print( mSort.arr[ m ] + " " );
                 }
                 System.out.println( "" );
           }
后加上changeFlag = false;
不然,该次排列的以后步骤无论有否变化,都将显示排列的内容。

解决方案 »

  1.   

    仔细想想你这一段吧,错在这里。 
      for( k = 0; k < j - 1; k ++ )
             {
               if( mSort.arr[ k + 1 ] < mSort.arr[ k ] )
               {
                   temp = mSort.arr[ k + 1 ];
                   mSort.arr[ k + 1 ] = mSort.arr[ k ];
                   mSort.arr[ k ] = temp;
                   changeFlag = true;
               }
               
               if(changeFlag)
               {
                   for(  m = 0; m < mSort.maxLen; m ++ )
                     {
                        System.out.print( mSort.arr[ m ] + " " );
                     }
                     System.out.println( "" );
               }
             }
    两个错误:1、 if(changeFlag)
               {
                   for(  m = 0; m < mSort.maxLen; m ++ )
                     {
                        System.out.print( mSort.arr[ m ] + " " );
                     }
                     System.out.println( "" );
               }
    放的位置不对,在一次排序中每两个数顺序不对时就要输出一次,累不累啊。          2、
    changeFlag = false;位置不对
    你放的地方这样的效果:3 2 5 12 11 4一次排序时只要第一次changeFlag = true后每次都是true,不管要不要排都会输出,这也就是
    2 3 5 11 4 12
    2 3 5 11 4 12
    2 3 5 11 4 12
    的原因了