Hai ragione, la fretta a volte...non fa ragionare la mente...
Allora ecco il codice con le righe dove si verifica l' eccezione:
codice:
public class QuickSort
{
public static void main(String [] args)
{
int [] a={5,4,6,7,8,0};
QSort(a,0,a.length-1); //lancio eccezione
}
public static void QSort(int [] A, int i, int r)
{
if(i>=r) return;
else{
int n=partition(A,i,r); //eccezione
QSort(A,i,n); //eccezione
QSort(A,n+1,r); //eccezione
}
}
public static int partition(int [] A, int i, int r)
{
int a=i-1;
int b=r+1;
int p=A[r]; //eccezione
while(true)
{
b--;
while(A[b]>p)
b--;
a=a+1;
while(A[a]<p)
a=a+1;
if(a<b)
swap(A, a, b);
else return p;
}
}
public static void swap(int [] A,int a, int b)
{
int tmp=A[a];
A[a]=A[b];
A[b]=tmp;
}
}
Il compilatore riporta questo:
codice:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at QuickSort.partition(QuickSort.java:24)
at QuickSort.QSort(QuickSort.java:14)
at QuickSort.QSort(QuickSort.java:15)
at QuickSort.QSort(QuickSort.java:15)
at QuickSort.QSort(QuickSort.java:16)
at QuickSort.main(QuickSort.java:6)
>Exit code: 1
Per quanto riguarda gli indici il metodo č:
codice:
public static void QSort(int [] A, int i, int r)
La chiamata č:
codice:
QSort(a,0,a.length-1);
Quindi ad i assegno 0 mentre ad r length-1