我试图完成一个程序,使用一个通用的快速排序方法来排序对象的数组列表,我终于摆脱了我熟悉的所有常见错误,但我的程序仍然没有正确排序。我用了一个类似的算法,当我排序只是字符串,它不是通用的,所以我不确定我错在哪里。请帮助!以下是我一直在使用的快速排序代码:
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);
}
}
字符串是可比较的,所以你可以对字符串使用compareTo。当您使它泛型时,您没有指定泛型元素必须是可比的,并且从您的代码中您不再使用compareTo。如果使用equals而不是compareTo,则无法确定哪个元素位于哪个元素之前。因此,您没有对任何内容进行排序。