在ArrayList上以降序实现QuickSort

我正在尝试用Java在arrayList上实现quickSort,我希望输出以降序排列。我有以下代码:

    public static <K,V extends Comparable> ArrayList<K> quickSort(ArrayList<K> toSort,HashMap<K,V> results) {

        if (toSort.size() <= 1) {
            return toSort;  //already sorted!
        }

        ArrayList<K> sorted = new ArrayList<K>();
        ArrayList<K> lesser = new ArrayList<K>();
        ArrayList<K> greater = new ArrayList<K>();

        K pivot = toSort.get(toSort.size()-1);   //use last element as pivot ??

        for (int i = 0; i < toSort.size(); i++) {

            if (results.get(toSort.get(i)).compareTo(results.get(pivot)) >=  0) {
                greater.add(toSort.get(i));
            }


            else {
                lesser.add(toSort.get(i));
            }
        }


        lesser = quickSort(lesser,results);
        greater = quickSort(greater,results);


        lesser.add(0,pivot);
        greater.addAll(lesser);
        sorted = greater;

但是,与其输出类似以下内容的内容:{99,98,97},

我收到以下“加倍”的输出:{99,99,98,98,97,97}

我想这个错误是在较小列表和较大列表的串联中的最后一个错误,但是我似乎无法弄清楚如何解决它。有什么建议吗?谢谢

exchange456 回答:在ArrayList上以降序实现QuickSort

问题是您没有从任何地方的输入中删除枢轴元素,而是稍后再次添加它,从而使其倍增。

本文链接:https://www.f2er.com/3040415.html

大家都在问