我在10 ^ 5左右的非常整数的索引数组上实现emerge排序。我知道java中有内置的排序命令,但我想自己实现。输出数组没有排序请找到我错的地方?
CODE
public void sort(ArrayList<Integer> finalarray)
{
if(finalarray.size()<2) return ;
ArrayList<Integer> right = new ArrayList<>();
ArrayList<Integer> left = new ArrayList<>();
int mid = finalarray.size()/2;
for(int i=0;i<mid;i++) left.add(finalarray.get(i));
for(int j=mid;j<finalarray.size();j++) right.add(finalarray.get(j));
sort(left);
sort(right);
int l=0, r=0 , m =0;
while(l< left.size() && r< right.size())
{
if(left.get(l)> right.get(r))
{
finalarray.set(m, right.get(r));
r++;
}
else
{
finalarray.set(m, left.get(l));
l++;
}
m++;
}
while(l< left.size())
{
finalarray.set(m, left.get(l));
l++;
m++;
}
while(r< right.size())
{
finalarray.set(m, right.get(r));
r++;
m++;
}
}
}
输入:1 4 五 2 2 五 0 8 2 2
输出:0
0
1
2
2
2
2
8
2
2
答案 0 :(得分:0)
我建议使用调试器。
您可能希望将 if 循环更改为,而。
while (l< left.size())
{
finalarray.set(m, left.get(l));
l++;
m++;
}
while (r< right.size())
{
finalarray.set(m, right.get(r));
r++;
m++;
}
答案 1 :(得分:0)
在while循环下面,在sort方法中应该有2个while循环,而不是if。
而(l
目前是