在java中实现合并排序

时间:2014-08-26 12:54:26

标签: java sorting

我在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

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

目前是