Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试合并排序是否稳定?_Java_Sorting - Fatal编程技术网

Java 如何测试合并排序是否稳定?

Java 如何测试合并排序是否稳定?,java,sorting,Java,Sorting,我知道我应该做一些输入。但是代码是什么样的呢?假设 public static void mergeSort(Comparable[] a, int left, int right) { if (right <= left) return; int mid = left + (right – left) / 2; mergeSort(a, left, mid); mergeSort(a, mid + 1, right); m

我知道我应该做一些输入。但是代码是什么样的呢?假设

   public static void mergeSort(Comparable[] a, int left, int right) {
      if (right <= left) return;
      int mid = left + (right – left) / 2;
      mergeSort(a, left, mid);
      mergeSort(a, mid + 1, right);
      merge(a, left, mid, right);
   } 
   public void merge(Comparable[] a, int left, int mid,int right) {
     for (int k = left; k <= right; k++) aux[k] = a[k]; 
       int i = left; j = mid + 1;
     for (int k = left; k <= right; k++) {
       if (i > mid) a[k] = aux[j++];
       else if (j > right) a[k] = aux[i++];
       else if (less(aux[j], aux[i]) a[k] = aux[j++];
       else a[k] = aux[i++];
     }
  }
publicstaticvoidmergesort(可比[]a,int left,int right){
如果(右
公共类合并排序){
私有int[]编号;
私人助理;
私有整数;
公共void排序(int[]值){
这个数字=数值;
数字=值。长度;
this.helper=newint[number];
合并排序(0,数字-1);
}
私有void合并排序(整数低,整数高){
//检查low是否比high小,如果不是,则对数组进行排序
如果(低<高){
/获取中间元素的索引
int middle=低+(高-低)/2;
//对数组的左侧排序
合并排序(低、中);
//对数组的右侧进行排序
合并排序(中+1,高);
//把两者结合起来
合并(低、中、高);
}
}
私有无效合并(整数低、整数中、整数高){
//将这两个部分复制到辅助对象数组中

对于(int i=low;我是说您正在构建自己的合并排序并想要测试它?我知道我应该处理一些输入-首先,
mergeSort()在哪里
您需要处理某些输入的方法?!您的问题不清楚?您首先要测试的代码在哪里。问题越清楚,您得到的答案就越好。抱歉!合并排序已上载。
public class Mergesort {
  private int[] numbers;
  private int[] helper;

  private int number;

  public void sort(int[] values) {
    this.numbers = values;
    number = values.length;
    this.helper = new int[number];
    mergesort(0, number - 1);
  }

  private void mergesort(int low, int high) {
    // Check if low is smaller then high, if not then the array is sorted
    if (low < high) {
      // Get the index of the element which is in the middle
      int middle = low + (high - low) / 2;
      // Sort the left side of the array
      mergesort(low, middle);
      // Sort the right side of the array
      mergesort(middle + 1, high);
      // Combine them both
      merge(low, middle, high);
    }
  }

  private void merge(int low, int middle, int high) {

    // Copy both parts into the helper array
    for (int i = low; i <= high; i++) {
      helper[i] = numbers[i];
    }

    int i = low;
    int j = middle + 1;
    int k = low;
    // Copy the smallest values from either the left or the right side back
    // to the original array
    while (i <= middle && j <= high) {
      if (helper[i] <= helper[j]) {
        numbers[k] = helper[i];
        i++;
      } else {
        numbers[k] = helper[j];
        j++;
      }
      k++;
    }
    // Copy the rest of the left side of the array into the target array
    while (i <= middle) {
      numbers[k] = helper[i];
      k++;
      i++;
    }

  }
}