Cocktail Sort ทำงานตรงกันข้ามกับการเรียงลำดับแบบฟอง โดยองค์ประกอบจะถูกวนซ้ำจากซ้ายไปขวา และองค์ประกอบที่ใหญ่ที่สุดจะถูกนำไปยังตำแหน่งที่ถูกต้องก่อนและอื่นๆ ในการจัดเรียงค็อกเทล องค์ประกอบจะถูกทำซ้ำทั้งสองทิศทาง (ซ้ายและขวา) โดยสลับกัน
ต่อไปนี้เป็นโปรแกรมสำหรับประเภทค็อกเทล -
ตัวอย่าง
public class Demo{
static int temp;
static void Cocktail(int a[], int n){
boolean swap = true;
int begin = 0,i;
int end = n - 1;
while (swap) {
swap = false;
for (i = begin; i < end; ++i){
if (a[i] > a[i + 1]){
temp = a[i];
a[i]=a[i+1];
a[i+1]=temp;
swap = true;
}
}
if (!swap)
break;
swap = false;
for (i = end - 1; i >= begin; --i){
if (a[i] > a[i + 1]){
temp = a[i];
a[i]=a[i+1];
a[i+1]=temp;
swap = true;
}
}
++begin;
}
}
public static void main(String[] args) {
int my_arr[] = {34, 78, 90, 32, 67, 12, 1, 0, 95};
Cocktail(my_arr, my_arr.length);
System.out.println("The sorted array is ");
for (int i = 0; i < my_arr.length; i++)
System.out.print(my_arr[i]+" ");
System.out.println();
}
} ผลลัพธ์
The sorted array is 0 1 12 32 34 67 78 90 95
ในขั้นตอนแรก วนรอบจะรันจากซ้ายไปขวา (คล้ายกับการเรียงลำดับแบบฟอง) ในระหว่างนั้น ระบบจะเปรียบเทียบรายการที่อยู่ติดกัน ถ้าค่ามือซ้ายมากกว่าค่ามือขวา ค่าจะถูกสลับ เมื่อการวนซ้ำครั้งแรกสิ้นสุดลง จะพบองค์ประกอบที่ใหญ่ที่สุดที่ส่วนท้ายของอาร์เรย์ ในขั้นตอนถัดไป วนรอบจะทำงานจากขวาไปซ้าย โดยออกจากรายการที่เรียงลำดับล่าสุด ที่นี่อีกครั้ง มีการเปรียบเทียบองค์ประกอบที่อยู่ติดกันและเพิ่มองค์ประกอบที่มากกว่าที่ส่วนท้ายของอาร์เรย์