国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java交換排序之雞尾酒排序實現方法

2019-11-26 15:17:52
字體:
來源:轉載
供稿:網友

本文實例講述了java交換排序之雞尾酒排序實現方法。分享給大家供大家參考。具體如下:

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

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

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


最差時間復雜度  O(n^2)
最優時間復雜度 O(n)
平均時間復雜度   O(n^2)

雞尾酒排序動態圖如下:

代碼分析:

package com.baobaotao.test; /**  * 排序研究  *  */ public class Sort {      /**    * 經典雞尾酒排序    * @param array 傳入的數組    */   public static void cocatailSort(int[] array) {     int length = array.length ;     //來回循環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 傳入的數組    */   public static void cocatailSortFlag(int[] array) {     int length = array.length ;     boolean flag1,flag2 = true ;     //來回循環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) ;     }   }      /**    * 按從小到大的順序交換數組    * @param a 傳入的數組    * @param b 傳入的要交換的數b    * @param c 傳入的要交換的數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 ;        }     }   }      /**    * 打印數組    * @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) ;   } }

結果分析:

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  

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密云县| 西和县| 枝江市| 北流市| 灵山县| 当涂县| 南漳县| 稻城县| 华蓥市| 丰台区| 保德县| 莎车县| 衡南县| 枞阳县| 枣强县| 忻城县| 南乐县| 德化县| 逊克县| 昌吉市| 永川市| 三门峡市| 仙游县| 囊谦县| 承德县| 莲花县| 彭州市| 阿图什市| 明光市| 株洲市| 佛冈县| 平原县| 桦南县| 曲麻莱县| 荔浦县| 富平县| 江华| 德州市| 南溪县| 田东县| 祁阳县|