所以我一直在測試不同的排序算法,現在我寫了一個Quicksort! 它的作品,但排序有點偏離!幾乎總是我得到這樣的輸出:Java中Quicksort的問題
[0, 1, 2, 3, 8, 6, 5, 4, 7, 9, 20, 16, 22, 21, 14, 17, 18, 10, 15, 19, 13, 11, 23, 12, 26, 24, 25, ...
這是我排序的100中的前27個元素。這就是我如何填寫隨機列表:
for(int i =0; i < 100; i ++){
int nr = rand.nextInt(100);
if (!numbers.contains(new Integer(nr))){
numbers.add(nr);
}else {
i--;
}
}
這裏是快速排序的代碼:
public class Quicksort{
@SuppressWarnings("unchecked")
static public <T> ArrayList<T> sortting(ArrayList<T> t){
//System.out.print("-");
T piv;
ArrayList<T> left ,right ,newT;
left = new ArrayList<T>();
right = new ArrayList<T>();
newT = new ArrayList<T>();
if (!t.isEmpty()){
piv = t.get(t.size()/2);
for (int i =0; i < t.size(); i++){
if (0 < ((Comparable<T>) piv).compareTo(t.get(i))){ //left
left.add(t.get(i));
}else{ //right
right.add(t.get(i));
}
}
if (left.isEmpty() || right.isEmpty()){
newT.addAll(left);
newT.addAll(right);
return newT;
}else {
right = sortting(right);
left = sortting(left);
newT.addAll(left);
newT.addAll(right);
}
return newT;
}
return null;
}
}
但如果我刪除檢查我怎麼知道,當算法需要停止/結束 –
好吧我已經嘗試,但仍然沒有工作順便說一句我已經改變了'返回null'到'返回新ArrayList <>();'應該是一個空陣!在常見問題解答中,問題在於右側向一個inf循環中溢出了內存。這意味着我看到右側被迫停止,因爲左側是空的,但前面的右側不會停止! –