Algoritmo di ordinamento HeapSort

di il
1 risposte

Algoritmo di ordinamento HeapSort

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)

1 Risposte

  • Re: Algoritmo di ordinamento HeapSort

    mari.98 ha scritto:


    ma quando vado ad eseguirlo esce questo e non riesco a capire cosa devo correggere:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
    Rivedi meglio il codice considerando che negli array l'indice parte da 0, non 1.
Devi accedere o registrarti per scrivere nel forum
1 risposte