java - 快速排序出界

标签 java indexoutofboundsexception 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);

看看是否有帮助。

关于java - 快速排序出界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58846465/

相关文章:

java - 线程快速排序

algorithm - 三值中值策略

java - 我可以有一个没有键的非空 HashMap 吗?

java - Spring MVC |无法实例化属性类型以自动增长嵌套属性路径

java - 空请求正文未被 Spring @RequestBody @Valid 注释捕获

java - JOptionPane 的 While 循环返回 StringIndexOutOfBounds 异常

java - 如何制作一个将打开计算器应用程序 "X"次的 Java 程序

java - 如何读取文件、反转顺序和反转顺序写入

java - 为什么这是数组越界异常?

c++ - 带链表的稳定快速排序