我正在尝试实现合并排序,但我无法实现基本条件。
我有一个函数merge
,它接收两个已排序的数组并返回一个合并的数组。
int[] merge(int[] a , int[] b)
现在我的合并排序例程如下
private static int[] mergeSort(int[] a, int low , int high)
{
int mid = (low + high) /2;
if (low < high)
{
return merge( mergeSort(a,low, mid-1), mergeSort(a, mid , high));
}
return //return what ?
}
这里的基本条件是什么?我犯的错是什么?
答案 0 :(得分:2)
基本条件是您有单个元素列表a
,根据定义,它已经排序。回来吧。
答案 1 :(得分:1)
排序方法有两个返回条件:
merge方法应该包含两个已排序的数组并返回一个已排序的数组。
public int[] sort(int[] input){
int mid = input.length/2;
if(input.length > 1){
// create and populate left and right arrays to merge
// left => input[0 > mid-1]
// right => input[mid > input.length]
return merge(sort(left), sort(right));
}
return input;
}
public int[] merge(int[] left, int[] right){
// your merge logic
}
答案 2 :(得分:0)
只需返回a
,因为它已经排序(最多包含一个元素)。