Java 出界的快速排序
我知道还有其他问题,但是没有人知道我的快速排序实现,所以我需要你的帮助来解决这个问题 这是我的快速排序:Java 出界的快速排序,java,indexoutofboundsexception,quicksort,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,
//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;
}
我添加了一条注释,注释中包含了被指控行的编号。您的问题很可能是由于首先检查索引处的数组,然后检查索引是否在范围内 相反:
do i++;
while(arrayPatients[i].priority <= pivot && i<= last); //Line 1441
do j--;
while(arrayPatients[j].priority > pivot && j >= first);
doi++;
while(arrayPatients[i].优先级=第一);
尝试:
doi++;
而(i),;
看看这是否有帮助。您能发布完整的错误消息吗?请务必稍等片刻,并在第1441行arrayPatients[i]处编辑错误。在某个点上,i是一个不存在的索引。试着把“System.out.println”(“Index:+i”);“放在while循环中,看看当它出错时我设置了什么。真的,谢谢!!你让我开心!这件事太简单了,我一点也没想到。非常感谢。另外,为什么不使用array.sort(t[]数组,Comparator-Comparator)?您需要的比较器如下所示:comparator:(o1,o2)->Long.compare(o1.priority,o2.priority)或comparator.comparingLong(Patient::getPriority)。我看不出你的代码与标准的快速排序有什么不同(它有一些糟糕的O(n^2)最坏的情况),你几乎肯定会看到使用java的默认实现可以加快速度。在我的情况下,快速排序是最好的解决方案,因为我的数组中有大量的元素,我知道它们总是随机的。快速排序只有在元素已经排序的情况下才有O(n^2),这不是我的情况Java绝对优化了排序,我怀疑标准的快速排序可以与之相比。我也非常确定它在小数组(大约15个元素)上使用插入排序来进一步压缩性能。我将做一些快速测试,看看在您的情况下,性能差异是否更好,因为您需要维护自己的排序。这很有趣。我对各种大小的数组进行了一些测试,似乎用于排序数组的标准java算法的速度要慢一倍左右。我对甲骨文有点失望。
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);