-1
如何更改我的以下快速排序代碼,以便我可以使用隨機數據透視而不是中間整數透視?如何更改我的下列快速排序代碼,以便我可以使用隨機數據透視表?
public ArrayList<Integer> quicksort(ArrayList<Integer> input){
if(input.size() <= 1){
return input;
}
int middle = (int) Math.ceil((double)input.size()/2);
##int randomint= arrayList.get(random.nextInt(arrayList.size()));##
##I WANT TO USE THIS RANDOMINT AS A PIVOT##
int pivot = input.get(middle);
ArrayList<Integer> less = new ArrayList<Integer>();
ArrayList<Integer> greater = new ArrayList<Integer>();
for (int i = 0; i < input.size(); i++) {
if(input.get(i) <= pivot){
if(i == middle){
continue;
}
less.add(input.get(i));
}
else{
greater.add(input.get(i));
}
}
return concatenate(quicksort(less), pivot, quicksort(greater));
}
private ArrayList<Integer> concatenate(ArrayList<Integer> less, int pivot, ArrayList<Integer> greater){
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < less.size(); i++) {
list.add(less.get(i));
}
list.add(pivot);
for (int i = 0; i < greater.size(); i++) {
list.add(greater.get(i));
}
return list;
}
我想用randomint作爲關鍵。當我嘗試直接替換randomint時,我得到數組超出限制的異常。謝謝。
可能的重複[什麼導致java.lang.ArrayIndexOutOfBoundsException,我該如何防止它?](http://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-我想阻止它) –
我想用這個, – Riccado
你的'randomint'實際上是你的支點。 'ArrayList.get()'返回'ArrayList'的內容。 –