[英]QuickSort: what is wrong with this implementation
您能解釋一下Java中這種quicksort算法實現的問題嗎?
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;
}
一個明顯的錯誤是大小為1的數組未正確處理。 正確設置此點很重要,因為這是遞歸的基本情況之一。
代替
if (array.size() <=1) {
ArrayList<Integer> a = new ArrayList<Integer>();
return a;
}
采用
if (array.size() <=1){
return array
}
該算法的主要問題-您正在為函數的每次調用創建新的ArrayList。 這樣,您就可以使有關QuickSort的最好的東西無效-無需任何額外的內存就位排序。 嘗試僅使用第一個給定的數組 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.