在Bitonic Sort中,比较是按预定义的顺序(Bitonic顺序)进行的,而不取决于要排序的数据。让我们看一下Bitonic Sort Java程序的示例-
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("该类的对象已创建。"); my_ob.sort_vals(my_arr, 0, my_arr.length, up); System.out.println("The array after performing bitonic sort is"); print_vals(my_arr); } }
输出结果
该类的对象已创建。 The array after performing bitonic sort is 0 11 12 32 54 67 72 91
名为Demo的类包含以数组为参数的'compare_swap'函数,并检查排序的方向。因此,元素被交换。定义了另一个名为“ merge_vals”的函数,该函数遍历数组并使用特定值调用“ compare_swap”函数。
接下来,使用各种参数调用“ merge_vals”函数。定义了另一个名为“ sort_vals”的函数,该函数在函数内部以不同的值调用。然后这些排序的值
被合并。定义了一个名为“ print_vals”的静态函数,该函数将数组作为参数,并在数组的各个元素中运行“ for”循环,并将其打印在控制台上。
main函数定义一个数组和一个'up'变量的值。创建一个新的类对象,并在定义的数组上调用“ sort_now”函数。然后,输出将打印在控制台上。