如何使用arraylist中的对象正确运行通用quicksort方法

时间:2016-10-24 02:27:41

标签: java algorithm quicksort

我正在尝试完成一个使用通用quicksort方法对对象的arraylist进行排序的程序,我终于摆脱了我熟悉的所有常见错误,但我的程序仍然没有正确排序。当我整理字符串时我使用了类似的算法并且它不是通用的所以我不确定我哪里出错了。请帮忙! 以下是我一直在使用的以下快速排序代码:

private static <E> void doQuickSort(ArrayList <E> list, int start, int end)
{
    if(list == null || list.size() == 0)
        return;
    if(start >= end)
        return;

    int middle = start + (end - start) / 2;
    E pivot = (E) list.get(middle);

    int s = start, e = end;
    while (s <= e)
    {
        while(pivot.equals(list.get(s)))
        {
            s++;
        }

        while(pivot.equals(list.get(e)))
            e--;


    if(s <= e)
    {
        E temp = list.get(s);
        list.set(s,  list.get(e));
        list.set(e, temp);
        s++;
        e--;
    }


    if(start < e)
        doQuickSort(list, start, e);
    if(end > s)
        doQuickSort(list, s, end);
    }
}

1 个答案:

答案 0 :(得分:0)

字符串是可比较的,因此您可以将compareTo与String一起使用。当您将其设为通用时,您没有指定通用元素必须是Comparable,并且从您的代码中不再使用compareTo。如果使用equals而不是compareTo,则无法确定哪些元素优先于哪些元素。因此,您没有对任何内容进行排序。