最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java交換排序之雞尾酒排序?qū)崿F(xiàn)方法

 更新時間:2015年02月12日 10:51:51   作者:Benjamin_whx  
這篇文章主要介紹了java交換排序之雞尾酒排序?qū)崿F(xiàn)方法,實例分析了排序的原理與相關(guān)的實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了java交換排序之雞尾酒排序?qū)崿F(xiàn)方法。分享給大家供大家參考。具體如下:

雞尾酒排序,也就是定向冒泡排序, 雞尾酒攪拌排序, 攪拌排序 (也可以視作選擇排序的一種變形), 漣漪排序, 來回排序 or 快樂小時排序, 是冒泡排序的一種變形。此算法與冒泡排序的不同處在于排序時是以雙向在序列中進行排序。

與冒泡排序不同的地方:
雞尾酒排序等于是冒泡排序的輕微變形。不同的地方在于從低到高然后從高到低,而冒泡排序則僅從低到高去比較序列里的每個元素。他可以得到比冒泡排序稍微好一點的效能,原因是冒泡排序只從一個方向進行比對(由低到高),每次循環(huán)只移動一個項目。

以序列(2,3,4,5,1)為例,雞尾酒排序只需要訪問一次序列就可以完成排序,但如果使用冒泡排序則需要四次。 但是在亂數(shù)序列的狀態(tài)下,雞尾酒排序與冒泡排序的效率都很差勁。


最差時間復(fù)雜度  O(n^2)
最優(yōu)時間復(fù)雜度 O(n)
平均時間復(fù)雜度   O(n^2)

雞尾酒排序動態(tài)圖如下:

代碼分析:

package com.baobaotao.test; 
/** 
 * 排序研究 
 * 
 */ 
public class Sort { 
   
  /** 
   * 經(jīng)典雞尾酒排序 
   * @param array 傳入的數(shù)組 
   */ 
  public static void cocatailSort(int[] array) { 
    int length = array.length ; 
    //來回循環(huán)length/2次 
    for(int i=0;i<length/2;i++) { 
      for(int j=i;j<length-i-1;j++) { 
        if(array[j] > array[j+1]) { 
          swap(array, j, j+1) ; 
        } 
      } 
      for(int j=length-i-1;j>i;j--) { 
        if(array[j] < array[j-1]) { 
          swap(array, j-1, j) ; 
        } 
      } 
      printArr(array) ; 
    } 
  } 
   
  /** 
   * 雞尾酒排序(帶標志位) 
   * @param array 傳入的數(shù)組 
   */ 
  public static void cocatailSortFlag(int[] array) { 
    int length = array.length ; 
    boolean flag1,flag2 = true ; 
    //來回循環(huán)length/2次 
    for(int i=0;i<length/2;i++) { 
      flag1 = true ; 
      flag2 = true ; 
      for(int j=i;j<length-i-1;j++) { 
        if(array[j] > array[j+1]) { 
          swap(array, j, j+1) ; 
          flag1 = false ; 
        } 
      } 
      for(int j=length-i-1;j>i;j--) { 
        if(array[j] < array[j-1]) { 
          swap(array, j-1, j) ; 
          flag2 = false ; 
        } 
      } 
      if(flag1 && flag2) { 
        break ; 
      } 
      printArr(array) ; 
    } 
  } 
   
  /** 
   * 按從小到大的順序交換數(shù)組 
   * @param a 傳入的數(shù)組 
   * @param b 傳入的要交換的數(shù)b 
   * @param c 傳入的要交換的數(shù)c 
   */ 
  public static void swap(int[] a, int b, int c) { 
    int temp = 0 ; 
    if(b < c) { 
      if(a[b] > a[c]) { 
        temp = a[b] ; 
        a[b] = a[c] ; 
        a[c] = temp ;  
      } 
    } 
  } 
   
  /** 
   * 打印數(shù)組 
   * @param array 
   */ 
  public static void printArr(int[] array) { 
    for(int c : array) { 
      System.out.print(c + " "); 
    } 
    System.out.println(); 
  } 
   
  public static void main(String[] args) { 
    int[] number={11,95,45,15,78,84,51,24,12} ; 
    int[] number2 = {11,95,45,15,78,84,51,24,12} ; 
    cocatailSort(number) ; 
    System.out.println("*****************"); 
    cocatailSortFlag(number2) ; 
  } 
}

結(jié)果分析:

11 12 45 15 78 84 51 24 95  
11 12 15 24 45 78 51 84 95  
11 12 15 24 45 51 78 84 95  
11 12 15 24 45 51 78 84 95  
***************** 
11 12 45 15 78 84 51 24 95  
11 12 15 24 45 78 51 84 95  
11 12 15 24 45 51 78 84 95  

可見雞尾酒排序排序的次數(shù)比普通冒泡排序要少很多。只需要4次,用了改進版的標志位雞尾酒排序僅需要3次就可以完成排序。

希望本文所述對大家的java程序設(shè)計有所幫助。

相關(guān)文章

最新評論

印江| 永定县| 娱乐| 盐边县| 会东县| 遵义市| 潍坊市| 新邵县| 新乐市| 正安县| 盘锦市| 通州市| 天峻县| 新津县| 芜湖市| 成武县| 泗水县| 拜泉县| 遵义县| 含山县| 张家口市| 河北区| 抚顺市| 巴里| 建瓯市| 福贡县| 张家港市| 公安县| 东光县| 南充市| 库尔勒市| 乐亭县| 新津县| 南汇区| 沂南县| 昭觉县| 盐亭县| 准格尔旗| 天门市| 孟州市| 衡山县|