視頻動畫 | 什麼是雞尾酒排序?

點擊藍色「五分鐘學算法」關注我喲

加個「星標」,天天中午 12:15,一起學算法

來源 | 算法無遺策

雞尾酒排序其實就是冒泡排序的變形,它的時間複雜度和冒泡排序一樣,都是O(n^2),比快速排序要慢不少。

 

 

雞尾酒排序的思想有點像擺鐘一樣,從左到右,又從右到左。而冒泡排序只是單向執行。

 

雞尾酒排序也是交換排序,假設做一個升序排序,先從左到右,交換一趟把最大的數放置右邊,然後從右到左,把最小的數放置左邊。

 

視頻動畫

 

Code

 

 

Result

 

初始狀態 [5, 1, 9, 3, 7, 4, 8, 6, 2]

從左到右發生交換 [1, 5, 9, 3, 7, 4, 8, 6, 2]

從左到右發生交換 [1, 5, 3, 9, 7, 4, 8, 6, 2]

從左到右發生交換 [1, 5, 3, 7, 9, 4, 8, 6, 2]

從左到右發生交換 [1, 5, 3, 7, 4, 9, 8, 6, 2]

從左到右發生交換 [1, 5, 3, 7, 4, 8, 9, 6, 2]

從左到右發生交換 [1, 5, 3, 7, 4, 8, 6, 9, 2]

從左到右發生交換 [1, 5, 3, 7, 4, 8, 6, 2, 9]

從右到左發生交換 [1, 5, 3, 7, 4, 8, 2, 6, 9]

從右到左發生交換 [1, 5, 3, 7, 4, 2, 8, 6, 9]

從右到左發生交換 [1, 5, 3, 7, 2, 4, 8, 6, 9]

從右到左發生交換 [1, 5, 3, 2, 7, 4, 8, 6, 9]

從右到左發生交換 [1, 5, 2, 3, 7, 4, 8, 6, 9]

從右到左發生交換 [1, 2, 5, 3, 7, 4, 8, 6, 9]

從左到右發生交換 [1, 2, 3, 5, 7, 4, 8, 6, 9]

從左到右發生交換 [1, 2, 3, 5, 4, 7, 8, 6, 9]

從左到右發生交換 [1, 2, 3, 5, 4, 7, 6, 8, 9]

從右到左發生交換 [1, 2, 3, 5, 4, 6, 7, 8, 9]

從右到左發生交換 [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

優化 減少不必要的交換

 

看了前面冒泡排序和快速排序,我相信優化是一項學習的重點,以後面試中可以把這項說說來,展示出你的實力。

 

這次我們就優化不必要的交換次數,come on!

 

我麼通過移除swap函數的調用,從而讓程序運行的更快一點。每次進行符合條件判斷時,不做交換,讓最大或者最小的數據做一個標記,待全部比較完之後,才進行做交換。

 

視頻動畫

 

Code

 

 

Result

 

初始狀態 [5, 1, 9, 3, 7, 4, 8, 6, 2]

從左到右發生交換 [5, 1, 2, 3, 7, 4, 8, 6, 9]

從右到左發生交換 [1, 5, 2, 3, 7, 4, 8, 6, 9]

從左到右發生交換 [1, 5, 2, 3, 7, 4, 6, 8, 9]

從右到左發生交換 [1, 2, 5, 3, 7, 4, 6, 8, 9]

從左到右發生交換 [1, 2, 5, 3, 6, 4, 7, 8, 9]

從右到左發生交換 [1, 2, 3, 5, 6, 4, 7, 8, 9]

從左到右發生交換 [1, 2, 3, 5, 4, 6, 7, 8, 9]

從右到左發生交換 [1, 2, 3, 4, 5, 6, 7, 8, 9]

-----------------------

公衆號:五分鐘學算法(ID:CXYxiaowu

博客:www.cxyxiaowu.com

知乎:程序員吳師兄

一個正在學習算法的人,致力於將算法講清楚!

長按下圖二維碼關注,和你一起領悟算法的魅力

戳一下下方的小程序,24 小時一起學算法