こんにちは、マージソートを行っていますが、すべてが正しいと思います。merge_sort 関数の最後の 2 行で苦労しています...最後の行から 2 番目の行では、「整数を変数に解決できません、ArrayList を変数に解決できません。型の不一致: ArrayList から int[] に変換できません。" そして最後の行には、「型の不一致は 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;
}