双调排序的 Java 程序
javaobject oriented programmingprogramming更新于 2025/7/8 11:56:17
在双调排序中,比较是按照预定义顺序(双调序列)进行的,与要排序的数据无关。让我们看一个双调排序 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("执行双调排序后的数组为");
print_vals(my_arr);
}
}
输出
类的对象已创建。 执行双调排序后的数组为 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’ 函数。然后,将输出打印在控制台上。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

