[排序] 冒泡排序

冒泡排序, 顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。

基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完数组后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的循环比较与交换动作,例如:
排序前:    95, 27, 90, 49, 80, 58, 6, 9, 18, 50  
第 1 次排序:27 90 49 80 58 6 9 18 50 95
第 2 次排序:27 49 80 58 6 9 18 50 90 95 
第 3 次排序:27 49 58 6 9 18 50 80 90 95 
第 4 次排序:27 49 6 9 18 50 58 80 90 95 
第 5 次排序:27 6 9 18 49 50 58 80 90 95 
第 6 次排序:6 9 18 27 49 50 58 80 90 95 
第 7 次排序:6 9 18 27 49 50 58 80 90 95  -- 没有改变次序,排序完成

Java代码实现

/*  *
  * 冒泡排序
  * @param data:等待排序整型数组
  *     data = { 95, 27, 90, 49, 80, 58, 6, 9, 18, 50 }
  *    排序结果:
  *        第 1 次排序:27 90 49 80 58 6 9 18 50 95 
  *        第 2 次排序:27 49 80 58 6 9 18 50 90 95 
  *        第 3 次排序:27 49 58 6 9 18 50 80 90 95 
  *        第 4 次排序:27 49 6 9 18 50 58 80 90 95 
  *        第 5 次排序:27 6 9 18 49 50 58 80 90 95 
  *        第 6 次排序:6 9 18 27 49 50 58 80 90 95 
  *        第 7 次排序:6 9 18 27 49 50 58 80 90 95 
  */   
    public   void  sort( int [] data)  {
         int  max  =  data.length;
         boolean  hasChange  =   true ;

         for  ( int  i  =   0 ; i  <  max  -   1   &&  hasChange; i ++ )  {
            hasChange  =   false ;
             for  ( int  j  =   0 ; j  <  max  -  i  -   1 ; j ++ )  {
                 if  (data[j  +   1 ]  <  data[j])  {
                     int  temp  =  data[j];
                    data[j]  =  data[j  +   1 ];
                    data[j  +   1 ]  =  temp;
                    hasChange  =   true ;
                } 
            } 
            System.out.print( "  第   "   +  (i  +   1 )  +   "   次排序:  " );
             for  ( int  k  =   0 ; k  <=  max  -   1 ; k ++ )  {
                System.out.print(data[k]  +   "     " );
            } 
            System.out.println();
        } 
    }
posted @ 2014-03-26 17:07  cRaZy_TyKeIo  阅读(199)  评论(0编辑  收藏  举报