欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)下,雞尾酒排序與冒泡排序的效率都很差勁。


最差時間復雜度  O(n^2)
最優(yōu)時間復雜度 O(n)
平均時間復雜度   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)文章

  • 詳解java模板和回調(diào)機制

    詳解java模板和回調(diào)機制

    這篇文章主要為大家詳細介紹了java模板和回調(diào)機制,學習java模板,感興趣的朋友可以參考一下
    2016-03-03
  • Java多線程之CAS算法實現(xiàn)線程安全

    Java多線程之CAS算法實現(xiàn)線程安全

    這篇文章主要介紹了java中如何通過CAS算法實現(xiàn)線程安全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面小編和大家一起來學習一下吧
    2019-05-05
  • JAVA多線程之實現(xiàn)用戶任務(wù)排隊并預估排隊時長

    JAVA多線程之實現(xiàn)用戶任務(wù)排隊并預估排隊時長

    本文主要介紹了Java多線程之實現(xiàn)用戶任務(wù)排隊并預估排隊時長的問題,文中的代碼具有一定的學習和工作價值,感興趣的小伙伴快跟隨小編一起學習一下吧
    2021-12-12
  • Spring AOP源碼深入分析

    Spring AOP源碼深入分析

    這篇文章主要介紹了Spring AOP源碼,AOP(Aspect Orient Programming),直譯過來就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補充
    2023-01-01
  • Java服務(wù)器主機信息監(jiān)控工具類的示例代碼

    Java服務(wù)器主機信息監(jiān)控工具類的示例代碼

    這篇文章主要介紹了Java服務(wù)器主機信息監(jiān)控工具類的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • SpringIOC框架的簡單實現(xiàn)步驟

    SpringIOC框架的簡單實現(xiàn)步驟

    這篇文章主要介紹了SpringIOC框架簡單實現(xiàn)步驟,幫助大家更好的理解和學習使用Spring,感興趣的朋友可以了解下
    2021-05-05
  • Java實現(xiàn)順時針輸出螺旋二維數(shù)組的方法示例

    Java實現(xiàn)順時針輸出螺旋二維數(shù)組的方法示例

    這篇文章主要介紹了利用Java如何實現(xiàn)順時針輸出螺旋二維數(shù)組的方法示例,文中給出了詳細的示例代碼和注釋,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • SpringBoot實現(xiàn)接口冪等性的4種方案

    SpringBoot實現(xiàn)接口冪等性的4種方案

    這篇文章主要介紹了SpringBoot實現(xiàn)接口冪等性的4種方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Java常用類String的面試題匯總(java面試題)

    Java常用類String的面試題匯總(java面試題)

    這篇文章主要介紹了Java常用類String的面試題匯總,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • MyBatis @Param注解的實現(xiàn)

    MyBatis @Param注解的實現(xiàn)

    本文主要介紹了MyBatis @Param注解的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論