ประเภทค็อกเทลเป็นอีกรูปแบบหนึ่งของการเรียงลำดับฟอง ในเทคนิคการจัดเรียงแบบฟองอากาศ ค้นหาจากซ้ายไปขวาเสมอ และพบองค์ประกอบที่ใหญ่ที่สุดที่ส่วนท้าย ในขั้นตอนที่สอง ค้นหาองค์ประกอบที่ใหญ่เป็นอันดับสองที่ตำแหน่งสุดท้ายที่สอง เทคนิคการเรียงลำดับนี้จะข้ามไปทั้งสองทิศทางหรือ ให้เราดูอัลกอริธึมเพื่อทำความเข้าใจแนวคิดนี้
อัลกอริทึม
ค็อกเทล(array, n)
Begin flag := true start := 0, end := n-1 while flag is set, do flag := false for i in range start to end-1, do if arr[i] > arr[i+1], then exchange arr[i] and arr[i+1] flag := true end if done if flag is not set, then break end if flag := false end := end – 1 for i in range end -1 down to start, do if arr[i] > arr[i+1], then exchange arr[i] and arr[i+1] flag := true end if done start := start + 1 done End
ตัวอย่าง
#include<iostream> using namespace std; void cocktailSort(int arr[], int n){ bool flag = true; int start = 0, end = n-1; while(flag){ flag = false; for(int i = start; i<end; i++){ //scan from left to right as bubble sort if(arr[i] > arr[i+1]){ swap(arr[i], arr[i+1]); flag = true; } } if(!flag){ //if nothing has changed simply break the loop break; } flag = false; end--; //decrease the end pointer for(int i = end - 1; i >= start; i--){ //scan from right to left if(arr[i] > arr[i+1]){ swap(arr[i], arr[i+1]); flag = true; } } start++; } } main() { int data[] = {54, 74, 98, 154, 98, 32, 20, 13, 35, 40}; int n = sizeof(data)/sizeof(data[0]); cout << "Sorted Sequence "; cocktailSort(data, n); for(int i = 0; i <n;i++){ cout << data[i] << " "; } }
ผลลัพธ์
Sorted Sequence 13 20 32 35 40 54 74 98 98 154