你好所以我正在做合并排序,我认为一切都是正确的,我只是很难处理merge_sort函数的最后两行......在倒数第二行,它说"整数不能解析为变量,ArrayList不能解析为变量,类型不匹配:无法从ArrayList转换为int[]。最后一行说:"Type Mismatch无法从int[]转换为ArrayList。我该如何解决这个问题?任何帮助都非常感谢!!
public static ArrayList<Integer> merge_sort(ArrayList<Integer> B)
{
if (B.size() <= 1)
System.out.println(B);
int midpoint = B.size()/2;
ArrayList<Integer> left = new ArrayList<Integer>(midpoint);
ArrayList<Integer> right;
if(B.size() % 2 == 0)
right = new ArrayList<Integer>(midpoint);
else
right = new ArrayList<Integer>(midpoint + 1);
int[] result = new int[B.size()];
for (int i = 0; i < midpoint; i++)
left.set(i, B.get(i));
int x = 0;
for (int j = midpoint; j < B.size(); j++)
{
if(x < right.size())
right.set(x, B.get(j));
x++;
}
left = merge_sort(left);
right = merge_sort(right);
result = merge(left, right);
return result;
}
public static ArrayList<Integer> merge(ArrayList<Integer> left, ArrayList<Integer> right)
{
int lengthResult = left.size() + right.size();
ArrayList<Integer> result = new ArrayList<Integer>(lengthResult);
int indexL = 0;
int indexR = 0;
int indexRes = 0;
while (indexL < left.size() || indexR < right.size())
{
if(indexL < left.size() && indexR < right.size())
{
if (left.get(indexL) <= right.get(indexR))
{
result.set(indexRes, left.get(indexL));
indexL++;
indexRes++;
}
else
{
result.set(indexRes, right.get(indexR));
indexR++;
indexRes++;
}
}
else if (indexL < left.size())
{
result.set(indexRes, left.get(indexL));
indexL++;
indexRes++;
}
else if (indexR < right.size())
{
result.set(indexRes, right.get(indexR));
indexR++;
indexRes++;
}
}
return result;
}
删除此行
int[] result = new int[B.size()];
并改变这一点
List<Integer> result = merge(left, right);
你的结果是 int[],但 merge() 方法返回一个数组列表,,尝试将结果更改为列表
result = merge(left, right);
result type =int[]
和merge(left, right); returns ArrayList<Integer>
尝试List<Integer> result;
而不是int[] result;
问题是,在java中,int和Integer的处理方式不同,一个是基元类型,另一个是类。因此,如果您使用的是 Integer,请始终按原样使用它。
因此,您的代码变为
List<Integer> result = merge(left, right);
而不是定义int[] result