我知道还有其他问题,但是没有人可以执行我的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);


看看是否有帮助。

10-07 19:49
查看更多