ককটেল বাছাই হল বুদবুদ সাজানোর আরেকটি ভিন্নতা। বুদ্বুদ সাজানোর কৌশলে, এটি সর্বদা বাম থেকে ডানে অনুসন্ধান করে এবং শেষে বৃহত্তম উপাদানটি খুঁজে পায়, দ্বিতীয় পর্যায়ে এটি দ্বিতীয় সর্বশেষ অবস্থানে দ্বিতীয় বৃহত্তম উপাদানটি খুঁজে পায়। এই বাছাই কৌশলটি বিকল্পভাবে উভয় দিকেই অতিক্রম করে। আইডিয়াটা বুঝতে অ্যালগরিদম দেখি।
অ্যালগরিদম
ককটেল(অ্যারে, 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