J'essaie le code suivant pour tas de tri qui donne ArrayIndexOutOfBoundsException
exception:HeapSort code snipplet donnant Index hors exception liée
package com.Sorting;
import java.util.Arrays;
public class HeapSort {
private static int arr[];
private static int l,r,max,hsize;
/**
* @param args
*/
public static void main(String[] args) {
int []numbers={55,2,93,1,23,10,66,12,7,54,3};
System.out.println(Arrays.toString(numbers));
HeapSort(numbers);
System.out.println(Arrays.toString(numbers));
}
private static void HeapSort(int myarr[]) {
// TODO Auto-generated method stub
arr = myarr;
hsize = arr.length - 1;
BuildHeap(arr);
for(int i = hsize;i>0;i--)
{
swap(0,i);
hsize--;
SatisfyHeap(arr,0);
}
}
private static void BuildHeap(int[] arr) {
// TODO Auto-generated method stub
for(int i = hsize/2; i>=0;i--)
{
SatisfyHeap(arr, i);
}
}
private static void SatisfyHeap(int[] arr, int i) {
// TODO Auto-generated method stub
l = 2*i;
r = 2*i+1;
if(l<=hsize && arr[l]>arr[i])
// if(arr[l]>arr[i] && l<=hsize )
{
max = l;
}
else
max = i;
if(r<=hsize && arr[r]>arr[max])
{
max = r;
}
if(max!=i)
{
swap(i,max);
SatisfyHeap(arr, max);
}
}
private static void swap(int i, int max) {
// TODO Auto-generated method stub
int temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
Le code ci-dessus ne donne aucune erreur si j'échange seulement les expressions utilisées sur le côté gauche et le côté droit dans l'instruction if
de la méthode SatisfyHeap
. c'est-à-dire que vous pouvez essayer de commenter la troisième ligne de la méthode SatisfyHeap
et décommenter la quatrième ligne. S'il vous plaît, aidez à comprendre cette magie.
Merci. Je comprends ton point de vue. – Tapan
@Tapan, si vous pensez que certaines réponses sont utiles, vous pouvez les voter. Et s'il y a une réponse qui correspond bien à votre question, vous pouvez la marquer comme une réponse «acceptée». – SergGr