java - 我不明白为什么它会为快速排序程序提供数组越界异常?
问题描述
我的代码似乎很好,但为什么它给出数组越界异常
import java.util.*;
import java.io.*;
class Qsort
{
static int partition(int a[],int l,int h)
{
int pivot=l;
int u=h;
while(l<=h)
{
while(a[pivot]>=a[l] && l<=u )
l++;
while(a[pivot]<a[h])
h--;
if(l<=h)
{
int temp=a[l];
a[l]=a[h];
a[h]=a[l];
}
}
int t=a[pivot];
a[pivot]=a[h];
a[h]=t;
return h;
}
static void qs(int a[],int l,int h)
{
if(l<h)
{
int v=partition(a,l,h);
qs(a,l,v-1);
qs(a,v+1,h);
}
}
}
class Qsmain
{
public static void main (String ars[]) throws IOException
{
int a[]= {10, 7, 8, 9, 1, 5};
int n=6;
Qsort.qs(a,0,n-1);
System.out.println("The Sorted array is - ");
for(int i=0;i<n;i++)
System.out.print(a[i]+" ");
}
}
如图所示的异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at Qsort.partition(Qsmain.java:16)
at Qsort.qs(Qsmain.java:36)
at Qsmain.main(Qsmain.java:61)
解决方案
错误来自这一行:
while(a[pivot]>=a[l] && l<=u )
l++;
当您循环遍历时,在某个阶段l = 5
and u = 5
, so l++ = 6
,然后抛出 Exception as a[6]
is out of bounds (最后一个成员是a[5]
)。因此,要解决此问题,请将语句更改为:
while(a[pivot]>=a[l] && l<u ) //instead of l<=u, write l<u
但这将导致下一个错误,因为 while(l<=h)
将转换为while(5<=5)
然后将永远运行,因为最后一个值为l
5 并且它不会增加。我会把它留给你来弄清楚如何解决这个问题。
推荐阅读
- javascript - $.ajax beforeSend 不等待其他 ajax 请求
- java - 从服务器数据库中提取和使用数据的最佳方式?
- reactjs - 安全反应登录
- git - 依赖任务和拉取请求
- javascript - 如何在function.php文件-wordpress中的简码中使用sqli连接
- javascript - 是否可以从库中定位样式化组件的子组件?
- php - 使用 PHP 在 while 循环中显示单个列
- javascript - 如何隐藏最后三里形式的ul?
- javascript - Map 或 flatmap 的工作方式类似于 Javascript 中的 Array.prototype.join
- log4j2 - 将 prometheus LOG4j conf 从 XML 转换为属性文件