雞尾酒排序

2021-09-29 08:51:58 字數 2468 閱讀 2536

雞尾酒排序是一種定向的氣泡排序,也可以稱為攪拌排序、漣漪排序。是氣泡排序的一種變形。

和氣泡排序的區別在於,雞尾酒排序採用了雙向比較並替換的原理

基本原理

第一步:宣告兩個臨時指標left和right,分別指向第乙個元素和最後乙個元素。

第二步:每一輪比較時,從right往left方向查詢最大數,放到right位置,從left往right方向查詢最小數,放到left位置。每查詢完一遍之後,因為最大數和最小數字置已經確定好,所以把查詢邊界縮短,如left++、right--。

第三步:重複第二步操作,直到left和right相遇時,表示排序已完成了。

演算法步驟**:

源資料:int nums =

第一輪排序:

先right方向,3>1,位置不變,3<8,交換位置,8>2,位置不變,8<9,交換位置,9依次和6547比,9最大。

結果為:[ 7, 4, 5, 6, 8, 2, 3, 1, 9 ]

再left方向,7>4,交換位置,4<5<6<8,位置不變,4>2,交換位置,2<3,位置不變,2>1,交換位置,1最小。

結果為:[ 1, 7, 5, 6, 8, 4, 3, 2, 9 ]

第二輪排序:

先right方向,2<3,交換位置,3<4,交換位置,4<8,交換位置,8依次和6571比,8最大。

結果為:[ 1, 7, 5, 6, 4, 3, 2, 8, 9 ]

再left方向,7>5,交換位置,5<6,位置不變,5>4,交換位置,4>3,交換位置,3>2,交換位置,2最小。

結果為:[1, 2, 7, 6, 5, 4, 3, 8, 9]

第三輪排序:

先right方向,3<4,交換位置,4<5,交換位置,5<6,交換位置,6<7,交換位置,7最大。

結果為:[1, 2, 6, 5, 4, 3, 7, 8, 9]

再left方向,6>5,交換位置,5>4,交換位置,4>3,交換位置,3最小。

結果為:[1, 2, 3, 6, 5, 4, 7, 8, 9]

最終排序:

先right方向,4<5,交換位置,5<6,交換位置,6最大。

結果為:[1, 2, 3, 5, 4, 6, 7, 8, 9]

再left方向,5>4,交換位置,4最小。

結果為:[1, 2, 3, 4, 5, 6, 7, 8, 9]

演算法排序效果圖:

演算法複雜度:

最差情況:t(n) = o(n^2)

最好情況:t(n) = o(n)

// n=100;

// o(n)含義

for(i=0;i<100;i++)

// o(n^2)含義

for(i=0;i<100;i++)

}

步驟簡介:宣告left和right兩個指標,每一輪排序時,把最小值放到left位置,把最大值放到right位置,直到排序完成。

/**

* 雞尾酒排序: 採用了雙向比較並替換的原理

* @param nums

*/public static int cocktailsort(int nums)

int left = 0; // 第1個下標

int right = nums.length-1; // 最後1個下標

while (left < right)

} right--; // 縮短右邊界

// 從left+1開始比較,把較小的數排列在前面

for (int i = left + 1; i <= right; i++)

} left++; // 縮短左邊界

雞尾酒排序

氣泡排序是從陣列的一側到另一側為一輪,根據條件兩兩交換,例如關於氣泡排序中的一組資料3 2 5 4 6 1 8 9 7,優化的氣泡排序在經過六輪之後得到排好的陣列,而雞尾酒排序是一輪次比較兩回 先從左到右比較,如果左邊比右面大,交換位置 然後從右到左比較,左邊比右邊大,交換位置。就用冒泡中的那組數從...

雞尾酒排序

1.什麼是雞尾酒排序 雞尾酒排序,也稱定向氣泡排序 雙氣泡排序 攪拌排序 漣漪排序 來回排序 快樂小時排序,是氣泡排序的一種變形。2.與氣泡排序的區別 雞尾酒是雙向排序,可以得到較好的排序效能 3.排序過程 舉例 int arr new 第一趟排序 從左到右找到最大值放在最右端 第一次排序 2和4比...

雞尾酒排序

所謂雞尾酒的排序就是元素比較和交換過程是雙向的,而氣泡排序是單項的,下面先舉個例子來一步一步介紹其排序思想。例如給定陣列元素為2,3,4,5,6,7,8,1 我們按照氣泡排序的思想,排序過程如下 從上面的過程我們可以看出,2 8已經有序,只有1無序,而我們卻要比較七次,才能排序成功。這樣,我們就可以...