我應該實現快速排序賦值和我有幾個問題。我的代碼運行得比想象的慢得多,我找不到減慢的速度,因爲我嚴格按照我們的教師僞代碼。快速排序太慢,ArrayIndexOutOfBoundsError
另外,當我們提交這段代碼時,它已經過測試,但是我們看不到測試,它說我得到了一個ArrayIndexOutOfBounds錯誤,這對我來說沒有意義,因爲我已經檢查了限制是否在正確的範圍內。
任何幫助,非常感謝。
public QuickSort() {
rand = new Random();
}
@Override
public void sort(int[] v) {
sort(v, 0, v.length-1);
}
/**
* Sort an array from two set points,
* usually from first index to last.
*/
private void sort(int[] v, int first, int last){
if(first >= last || last <= first || first < 0 || last < 0)
return;
else if(first >= last-10){
Insertionsort.sort(v, first, last);
return;
}
else if(first < last && first >= 0){
int rnd = first+rand.nextInt(last-first+1);
swap(v, rnd, last);
int mid = partition(v, first, last);
sort(v, first, mid-1);
sort(v, mid+1, last);
}
}
/**
* Swaps elements in array around a
* pivot element.
* < pivot to the left
* > pivot to the right
*/
private int partition(int[] v, int first, int last){
int x = v[last];
int i = first-1;
for(int j = first; j<last; j++){
if(v[j] <= x){
i++;
swap(v, i, j);
}
}
swap(v, (i+1), (last));
return (i+1);
}
/**
* Swap two elements in a list
*/
private void swap(int[] v, int a , int b){
int temp = v[a];
v[a] = v[b];
v[b] = temp;
}
我插入排序類:
public class Insertionsort {
public Insertionsort() {}
public static void sort(int[] v, int first, int last){
int j, toInsert;
for (int i = first+1; i < v[last]; i++) {
toInsert = v[i];
j = i;
while (j > 0 && v[j - 1] > toInsert) {
v[j] = v[j - 1];
j--;
}
v[j] = toInsert;
}
}
}
我的父(我們應該實現這個爲我們營造了不同版本的快速排序的)
public interface IntSorter {
/**
* Sorts the array into ascending numerical order.
*/
void sort(int[] v);
}
你有自己的測試呢?到目前爲止你的測試用例是什麼? –
你如何調用'sort'方法,你的輸入在哪裏? – stjepano
你的測試用例是什麼?你可以發佈**完整異常堆棧跟蹤**。 –