以下是我实现的归并排序。
当我在主方法中运行此程序时,我会得到原始数组的打印。不确定问题出在哪里。当我单独测试合并方法时,它是有效的。
private static void mergeSort(int[] a, int low , int high,int[] res)
{
int mid = (low + high) /2;
if (low < high)
{
mergeSort(a,low,mid-1,res);
mergeSort(a,mid,high-1,res);
merge(a,low,mid,high,res);
}
}
private static void merge(int[] a, int low , int mid , int high,int[] res)
{
int i = low;
int j = mid ;
int k =0;
while (i < mid && j < high)
if(a[i] < a[j])
res[k++] = a[i++];
else
res[k++] = a[j++];
while(i < mid)
res[k++] = a[i++];
while(j < high)
res[k++] =a[j++];
}
当我在主方法中运行此程序时,我会得到原始数组的打印。不确定问题出在哪里。当我单独测试合并方法时,它是有效的。
public static void main(String[] args)
{
int[] a = {45,24,53,13,54,45,63,23};
int[] res = new int[a.length];
mergeSort(a,0,a.length,res);
for(int i=0 ; i < res.length ; i++)
{
System.out.print(res[i] +",");
}
}
输出:
45,24,53,13,54,45,63,23,
我花了很多时间寻找问题,但是无法解决它。
13,23,24,45,45,53,54,63,
- Mysticialint k = low;
?如果你将它保留为零,你会得到0,0,0,0,54,45,63,23,
。 - Mysticiallow < high
,由于无限递归,它将导致堆栈溢出。 - Mysticial