日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

理论基础 —— 排序 —— 鸡尾酒排序

發布時間:2025/3/17 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 排序 —— 鸡尾酒排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【概述】

雞尾酒排序也稱定向冒泡排序,是一種穩定的排序方法,其是原始冒泡排序的改進,也是交換排序的一種。

定向冒泡排序與冒泡排序的不同在于其從低到高比較,然后再從高到低比較,如此循環往復,直到序列有序,而冒泡排序僅是從低到高的去比較序列中的每個元素。

其實現借助兩個指針來完成,一個作為頭指針,負責從前向后掃描,一個作為尾指針,負責從后向前掃描,外層循環依靠指針控制數組左右邊界,內層循環分別控制前后邊界的排序。

【過程】

初始關鍵字: ?『?6,5,3,1,8,7,2,4 ?』

第一趟排序: ?『?65,3,1,8,7,2,4 ?』

?? ? ? ? ? ? ? ? ? ? ? ?5,『?63,1,8,7,2,4』

?? ? ? ? ? ? ? ? ? ? ? ?5,3,『?61,8,7,2,4』

?? ? ? ? ? ? ? ? ? ? ? ?5,3,1,『?68,7,2,4』

?? ? ? ? ? ? ? ? ? ? ? ?5,3,1,6,『?87,2,4』

?? ? ? ? ? ? ? ? ? ? ? ?5,3,1,6,7,『?82,4』

?? ? ? ? ? ? ? ? ? ? ? ?5,3,1,6,7,2,『?84

?? ? ? ? ? ? ? ? ? ? ? ?5,3,1,6,7,2,4,『?8

第二趟排序:『?5,3,1,6,7,24,8

?? ? ? ? ? ? ? ? ? ? ?『 5,3,1,6,72,4,8

?? ? ? ? ? ? ? ? ? ? ?『 5,3,1,627,4,8

?? ? ? ? ? ? ? ? ? ? ?『 5,3,12,6,7,4,8

?? ? ? ? ? ? ? ? ? ? ?『 5,312,6,7,4,8

?? ? ? ? ? ? ? ? ? ? ?512,3,6,7,4,8

?? ? ? ? ? ? ? ? ? ? ?『 12,5,3,6,7,4,8

第三趟排序: 125,3,6,7,48

???????????????????????12,53,6,7,48

???????????????????????123,56,7,48

???????????????????????1,2,3,5,67,48

???????????????????????1,2,3,5,6,748

???????????????????????1,2,3,5,6,4,78

第四趟排序: 12,3,5,647,8

???????????????????????12,3,54,6,7,8

???????????????????????12,34,5,6,7,8

???????????????????????123,4,5,6,7,8

???????????????????????12,3,4,5,6,7,8

第五趟排序: 1,234,5,67,8

? ? ? ? ? ? ? ? ? ? ? ?1,2,3,4567,8

? ? ? ? ? ? ? ? ? ? ? ?1,2,3,4,567,8

? ? ? ? ? ? ? ? ? ? ? ?1,2,3,4,567,8

第六趟排序: 1,2,3456,7,8

? ? ? ? ? ? ? ? ? ? ? ?1,2,34,56,7,8

? ? ? ? ? ? ? ? ? ? ? ?1,2,34,56,7,8

第七趟排序:??1,2,3,456,7,8

結果: ??『??1,2,3,4,5,6,7,8 ?』

?????

? ? ? ? ? ? ? ? ? ? ? ?宏觀過程

【時空復雜度分析】

最好的情況,是要排序的表本身就是有序的,只需要進行 n-1 次比較,沒有數據交換,因此最優時間復雜度為 O(n)

最壞的情況,是要排序的表是逆序的情況,因此供需比較 n(n-1)/2 次,并作等數量級的記錄移動,因此最壞時間復雜度為 O(n^2)

而在平均情況下,時間復雜度與最壞時間復雜度同數量級,即平均時間復雜度為 O(n^2)

此外,定向冒泡排序僅需一個輔助空間,用于作記錄交換的暫存單元,即空間復雜度為 O(1)

【源程序】

void cocktailSort(int a[],int n){int left=1,right=n;while(left<right){/*前半輪,將最大元素放到后面*/for(int i=left;i<right;i++)if(a[i]>a[i+1])swap(a[i],a[i+1]);right--;/*后半輪,將最小元素放到前面*/for(int i=right;i>left;i--)if(a[i-1]>a[i])swap(a[i],a[i-1]);left++;} }

總結

以上是生活随笔為你收集整理的理论基础 —— 排序 —— 鸡尾酒排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。