双调排序的 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’ 函数。然后,将输出打印在控制台上。


相关文章


有用资源