雞尾酒排序等於氣泡排序的輕微變形,不同的地方在於從低到高然後從高到低,而氣泡排序則僅從低到高去比較序列裡的每個元素。他可以得到比氣泡排序稍微好一點的效能,原因是氣泡排序只從乙個方向進行比對(由低到高),每次迴圈只移動乙個專案。
雞尾酒排序演算法的運作如下:
;// 從左到右,將最小的放到左邊
for(
int i = right; i > left; i--)}
left ++;}
system.out.
println
(count +
" "
+ swapcount)
;return nums;
}private
void
swap
(int
nums,
int i,
int j)
期望:陣列長度越大,耗時越長,且呈現幾何倍數遞增
配置項配置值
t(1) = 長度1的陣列排序耗時
毫秒級:t(1), t(10), t(100), t(1000) 10毫秒
秒級:t(10000) 140毫秒
十秒級:t(100000) 10秒
千秒級:t(1000000) 1000秒
從上到下遞增倍數是:10倍, 7倍, 70倍
分水嶺是陣列長度10000.
整個排序期間,並未建立多餘的陣列占用記憶體(除了幾個使用者輔助判斷查詢次數,交換次數的變數)
時間複雜度:介於o(n)~o(n*n)之間
空間複雜度:o(1)
我測試了十多次,總體上看,雞尾酒氣泡排序效能略優於單向氣泡排序
氣泡排序 雞尾酒排序
include 交換函式 void swap int a,int i,int j 列印陣列 void printa int a,int len printf n 氣泡排序 int main1 int len sizeof a sizeof a 0 int i,j 外層迴圈控制輪數,每一輪找出乙個最大...
雞尾酒排序 氣泡排序最終版
雞尾酒排序 每一輪首先從前往後遍歷出乙個最大值放在最後面,然後從後往前遍歷乙個最小值放在最前面,即每一輪遍歷選出乙個最大值和乙個最小值。適合用於大部分元素已經有序的情況 時間複雜度和空間複雜度?是否穩定性?簡單粗暴的雞尾酒排序 public static void jiweijiu1 int a 從...
氣泡排序案例,雞尾酒排序
概念 依次比較相鄰的兩個數,將小數放在前面,大數放在後面 第一趟可得到 將最大數放到最後一位,第二趟可得到 將第二大的數放到倒數第二位,如此下去,重複以上過程,直至最終完成排序。由於排序過程中,總是將小數往前放,大數往後放,相當於氣泡往上公升,所以稱作氣泡排序。思路 用二重迴圈實現,外迴圈變數設為i...