快排越界

quicksort going out of bound

我知道还有其他问题,但没有人知道我的快速排序实现,所以我需要你的帮助来解决这个问题。

这是我的快速排序:

    //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.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);

看看是否有帮助。