我知道还有其他问题,但是没有人可以执行我的quicksort,所以我需要您的帮助来解决此问题。
这是我的快速排序:
//u is first index (0) and v is last (numberOfPatients - 1)
public void quickSort(Patient arrayPatients[], int u, int v) {
int q;
if(u == v) return;
q = perno(arrayPatients, u, v);
if(u < q) quickSort(arrayPatients, u, q-1);
if(q < v) quickSort(arrayPatients, q+1, v);
}
public int perno(Patient arrayPatients[], int first, int last){
Patient temp = new Patient();
int i = first;
int j = last + 1;
long pivot = arrayPatients[first].priority;
while(i < j){
do i++;
while(arrayPatients[i].priority <= pivot && i<= last); //Line 1441
do j--;
while(arrayPatients[j].priority > pivot && j >= first);
if(i < j){
//Swap arrayPatients[i] and arrayPatients[j]
temp = arrayPatients[i];
arrayPatients[i] = arrayPatients[j];
arrayPatients[j] = temp;
}
}
//Swap arrayPatients[first] and arrayPatients[j]
temp = arrayPatients[first];
arrayPatients[first] = arrayPatients[j];
arrayPatients[j] = temp;
return j;
}
编辑:
我有4位患者,这是我得到的错误:
java.lang.ArrayIndexOutOfBoundsException: 4
at sorter.Sort.perno(Sort.java:1441)
at sorter.Sort.quickSort(Sort.java:1425)
at sorter.Sort.quickSort(Sort.java:1428)
at sorter.Sort.sorting(Sort.java:851)
at sorter.Home$27.run(Home.java:1314)
我在注释中添加了该行的编号
最佳答案
您的问题很可能是由于首先检查索引处的数组,然后检查索引是否完全在范围内。
代替:
do i++;
while(arrayPatients[i].priority <= pivot && i<= last); //Line 1441
do j--;
while(arrayPatients[j].priority > pivot && j >= first);
尝试:
do i++;
while(i<= last && arrayPatients[i].priority <= pivot); //Line 1441
do j--;
while(j >= first && arrayPatients[j].priority > pivot);
看看是否有帮助。