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++;
}
}
}