Cocktail Sort hoạt động ngược với Bubble Sort, nơi phần tử duyệt từ trái sang phải, phần tử lớn nhất trước được đưa về vị trí đúng. Trong Cocktail Sort, phần tử duyệt qua cả hai hướng (trái và phải) theo cách xen kẽ.
Dưới đây là chương trình Cocktail Sort:
Ví dụ
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("Mảng đã sắp xếp: ");
for (int i = 0; i < my_arr.length; i++)
System.out.print(my_arr[i] + " ");
System.out.println();
}
}
Kết quả
Mảng đã sắp xếp: 0 1 12 32 34 67 78 90 95
Bước đầu, vòng lặp chạy trái sang phải (tương tự bubble sort), các phần tử liền kề so sánh. Nếu giá trị trái lớn hơn phải, hoán đổi. Sau lần lặp đầu, phần tử lớn nhất ở cuối mảng. Bước tiếp theo, vòng lặp chạy phải sang trái, bỏ qua phần tử vừa sắp xếp. Lại so sánh phần tử liền kề và phần tử lớn hơn đưa về cuối mảng.