Sto studiando gli algoritmi di ordinamento degli array e sto riscontrando problemi con l' HeapSort. Il codice l'ho scritto così:
public class OrdinaHeapSort {
public static void main(String[]args) {
int A[] = {42,38,11,75,99,23,84,67};
OrdinaHeapSort.HeapSort(A, A.length);
printArray(A);
}
public static void HeapSort(int a[], int n) {
int tmp;
int sx;
int dx;
for(sx=n/2; sx>=1; sx--)
setacciaHeap(a, sx, n);
for(dx=n; dx>1; dx--) {
tmp=a[1];
a[1]=a[dx];
a[dx]=tmp;
setacciaHeap(a, 1, dx-1);
}
}
public static void setacciaHeap(int[]a,int sx, int dx) {
int newVal;
int i;
int j;
for(newVal=a[sx], i=sx, j=2*i; j<=dx;) {
if((j<dx)&& (a[j+1]>a[j]))
j++;
if(newVal< a[j]) {
a[i]=a[j];
i=j;
j=2*i;
}
else
j=dx+1;
}
if(i!=sx)
a[i]=newVal;
}
public static void printArray(int arr[])
{
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i]+" ");
System.out.println();
}
}
ma quando vado ad eseguirlo esce questo e non riesco a capire cosa devo correggere:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at esercRiordina.OrdinaHeapSort.setacciaHeap(OrdinaHeapSort.java:32)
at esercRiordina.OrdinaHeapSort.HeapSort(OrdinaHeapSort.java:16)
at esercRiordina.OrdinaHeapSort.main(OrdinaHeapSort.java:6)