为什么我的排序方法无法对某些字符进行排序?

时间:2016-10-18 10:14:18

标签: java string sorting arraylist mergesort

所以,这是我的代码:

public ArrayList<Actor> SortArray(ArrayList<Actor> actorsArrayList){
    if (actorsArrayList.size()==2){
        if (actorsArrayList.get(0).getName().compareTo(actorsArrayList.get(1).getName())>0){
            Actor tmpActor = actorsArrayList.get(0);
            actorsArrayList.set(0, actorsArrayList.get(1));
            actorsArrayList.set(1, tmpActor);
        }
    }if (actorsArrayList.size()>2){
        ArrayList<Actor> part1 = new ArrayList<Actor>    (actorsArrayList.subList(0, actorsArrayList.size()/2));
        ArrayList<Actor> part2 = new ArrayList<Actor>    (actorsArrayList.subList(actorsArrayList.size()/2, actorsArrayList.size()));
        SortArray(part1);
        SortArray(part2);
        actorsArrayList = MergeArrays(part1,part2);
    }
    return actorsArrayList;
}

public ArrayList<Actor> MergeArrays(ArrayList<Actor> part1, ArrayList<Actor> part2){
    ArrayList<Actor> mergedArray = new ArrayList<Actor>();
    int i = 0;
    int j = 0;
    while (i<part1.size() && j<part2.size()){
        if (part1.get(i).getName().compareTo(part2.get(j).getName())<0){
            mergedArray.add(part1.get(i));
            i=i+1;
        }else if (part1.get(i).getName().compareTo(part2.get(j).getName())>0){
            mergedArray.add(part2.get(j));
            j=j+1;
        }
    }

    while (i<part1.size()){
        mergedArray.add(part1.get(i));
        i=i+1;
    }
    while (j<part2.size()){
        mergedArray.add(part2.get(j));
        j=j+1;
    }
    return mergedArray;
}

此代码与大型ActorsArrayList一起使用,通过使用我自己的MergeSort方法按字母顺序对其进行排序(Actor类包含参数Name,这是我用来对数组进行排序的字符串)。我目前正在尝试使用包含[d,a,b,l,z,x,y,c,w]的非常简单的数组来使用此方法。它的工作正常,但无论起始顺序是什么,“l”总是走到尽头。如果我尝试使用真正的actor arrayList(包含实名),它实际上并没有对任何东西进行排序。

非常感谢您的帮助:)

编辑1:澄清代码。我不需要我想要排序的数组的大小为0的情况,对于一些人评论它。

编辑2:永远不会有2个具有相同名称的演员,因为他们将在我的节目的前一阶段合并。

1 个答案:

答案 0 :(得分:0)

问题出在actorsArrayList.size()>2 SortArray()的案例中。您正在将每个部分分类为新的ArrayList,但忘记在调用MergeArrays()时使用已排序的列表。修复如下:

        part1 = SortArray(part1);
        part2 = SortArray(part2);