所以我一直在测试不同的排序算法,现在我写了一个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循环中溢出了内存。这意味着我看到右侧被迫停止,因为左侧是空的,但前面的右侧不会停止! –