Trong Bitonic Sort, so sánh theo trình tự định sẵn (dãy Bitonic), không phụ thuộc dữ liệu cần sắp xếp. Hãy xem ví dụ Bitonic Sort Java:
Ví dụ
public class Demo{
void compare_swap(int my_arr[], int i, int j, int direction){
if ((my_arr[i] > my_arr[j] && direction == 1) || (my_arr[i] < my_arr[j] && direction == 0)){
int temp = my_arr[i];
my_arr[i] = my_arr[j];
my_arr[j] = temp;
}
}
void merge_vals(int my_arr[], int low, int cnt, int direction){
if (cnt > 1){
int k = cnt / 2;
for (int i = low; i < low + k; i++)
compare_swap(my_arr, i, i + k, direction);
merge_vals(my_arr, low, k, direction);
merge_vals(my_arr, low + k, k, direction);
}
}
void sort_vals(int my_arr[], int low, int cnt, int direction){
if (cnt > 1){
int k = cnt / 2;
sort_vals(my_arr, low, k, 1);
sort_vals(my_arr, low + k, k, 0);
merge_vals(my_arr, low, cnt, direction);
}
}
static void print_vals(int my_arr[]){
int n = my_arr.length;
for (int i = 0; i < n; ++i)
System.out.print(my_arr[i] + " ");
System.out.println();
}
public static void main(String args[]){
int my_arr[] = {12, 67, 91, 54, 72, 32, 11, 0};
int up = 1;
Demo my_ob = new Demo();
System.out.println("Đối tượng lớp đã được tạo.");
my_ob.sort_vals(my_arr, 0, my_arr.length, up);
System.out.println("Mảng sau khi bitonic sort: ");
print_vals(my_arr);
}
}
Kết quả
Đối tượng lớp đã được tạo. Mảng sau khi bitonic sort: 0 11 12 32 54 67 72 91
Lớp Demo chứa hàm compare_swap nhận mảng, kiểm tra hướng sắp xếp. Theo đó, phần tử được hoán đổi. Hàm merge_vals duyệt mảng và gọi compare_swap với giá trị cụ thể.
Hàm merge_vals gọi với các tham số khác. Hàm sort_vals gọi bên trong với giá trị khác. Các giá trị đã sắp xếp được gộp. Hàm tĩnh print_vals nhận mảng, chạy vòng for qua các phần tử và in ra console.
Main định nghĩa mảng và giá trị up. Instance mới tạo và sort_vals gọi trên mảng. Kết quả in ra console.