使用快速排序无法正常工作排列字符串的ArrayList

时间:2014-02-07 17:22:29

标签: java algorithm arraylist quicksort

我有一个ArrayList由字符串组成,全部为小写,没有唯一字符。我想按字母顺序排列这个ArrayList,我尝试使用“quicksort”,但我注意到一个问题,即算法将第一个数据透视图放入第一个数据透视表后,我的lo无法正确计算正确的位置。

例如,如果我的数组由a, d, e, c, a组成,我的快速排序将枢轴a置于正确位置并开始对数组的另一侧进行排序,则它从e开始而不是d a, d, a, c, e导致结果为 private ArrayList<String> sort(ArrayList<String> ar, int lo, int hi){ if (lo < hi){ int splitPoint = partition(ar, lo, hi); sort(ar, lo, splitPoint); sort(ar, splitPoint +1, hi); } return ar; } private int partition(ArrayList<String> ar, int lo, int hi){ String pivot = ar.get(lo); lo--; hi++; while (true){ lo++; while (lo<hi && ar.get(lo).compareTo(pivot) < 0){ lo++; } hi--; while (hi>lo && ar.get(hi).compareTo(pivot) > 0){ hi--; } if (lo<hi){ swap(ar, lo, hi); }else { return hi; } } }

代码:

    public Document(String fName){
         ArrayList xa = loadFile(fName);
        sort(xa, 0, xa.size() - 1);    
    }

方法算法被称为:

lo

我尝试过这么多次调试,但是我一直迷失在编译器开始上堆栈树的部分。为什么我的 private ArrayList<String> swap(ArrayList<String> ar, int a, int b){ String temp = ar.get(a); ar.set(a, ar.get(b)); ar.set(b, temp); return ar; } 一个值高于所需值?是什么造成的?

交换方法:

0

注意:我从位置{{1}}的

开始

1 个答案:

答案 0 :(得分:2)

您必须在分区方法中考虑相同的情况。 您只需更改第二个,如下所示:

while (hi>lo && ar.get(hi).compareTo(pivot) >= 0){