在我的合并排序中没有获得所需的输出

时间:2014-08-26 07:52:30

标签: java sorting

这是我在java中的合并排序实现,我没有得到排序输出。对于排序哪种排序是最佳合并或快速排序。 代码:

public void sort(ArrayList<Integer> finalarray)
    {   
        if(finalarray.size()<2) return;

        int mid;

        mid = finalarray.size()/2;

        ArrayList<Integer> right = new ArrayList<>();
        ArrayList<Integer> left  = new ArrayList<>();
        for(int i=0;i<mid;i++) left.add(finalarray.get(i));
        for(int i=mid;i<finalarray.size();i++) right.add(finalarray.get(mid));
        sort(left);
        sort(right);
        //System.out.println("Left" + left.size());
        //System.exit(1);
        int  l=0 ,f=0, r=0;
        while(l<left.size() && r<right.size()) {
             if(right.get(r)>left.get(l)) {
                 finalarray.set(f, left.get(l));             
                 l++;
             } else {
                 finalarray.set(f, right.get(r));
                 r++;
             }
             f++;               
        }
        while(l<left.size()) 
            finalarray.set(f, left.get(l));
            f++;
            l++:
        }
        while( r<right.size())  {
            finalarray.set(f, right.get(r));
            f++;
            r++:
        }
    }
}

最终输出不是排序数组,请帮我找出我犯错误的地方。打印的数组未分类
提前致谢

1 个答案:

答案 0 :(得分:1)

在一个阵列耗尽后,你会迭代提醒,但它中有一个错误:

    while(l<left.size() )
    {
        finalarray.set(f, right.get(l));
                         //^^^
              f++;
               l++:
    }

您应该使用left中的元素填充它,而不是来自right