你能解释一下这个快速排序算法在java中的实现有什么问题吗?
static ArrayList<Integer> quickSort(ArrayList<Integer> array){
if (array.size() <=1){
ArrayList<Integer> a = new ArrayList<Integer>();
return a;
}
int pivotIndex = array.size() / 2;
int pivot = array.get(pivotIndex);
ArrayList<Integer> left= new ArrayList<Integer>();
ArrayList<Integer> right = new ArrayList<Integer>();
for (int i = 0; i < array.size(); i++) {
if (i!=pivotIndex){
if (array.get(i) > pivot)
right.add(array.get(i));
else
left.add(array.get(i));
}
}
ArrayList<Integer> l = new ArrayList<Integer>();
l.addAll(quickSort(left));
l.add(pivot);
l.addAll(quickSort(right));
return l;
}
答案 0 :(得分:3)
一个明显的错误是大小为1的数组未正确处理。这是正确的,因为这是递归的基本案例之一。
答案 1 :(得分:3)
而不是
if (array.size() <=1) {
ArrayList<Integer> a = new ArrayList<Integer>();
return a;
}
使用
if (array.size() <=1){
return array
}
答案 2 :(得分:1)
此算法的主要问题 - 您为每次调用函数创建新的ArrayLists。通过这种方式,您可以取消关于QuickSort的最佳功能 - 在没有任何额外内存的情况下进行排序。尝试仅使用第一个给定的数组。