2010-05-31 4 views
0

je le code suivant:Question sur radix LSD sorte

public class LSD{ 
    public static int R=1<<8; 
    public static int bytesword=4; 
    public static void radixLSD(int a[],int l,int r){ 
     int aux[]=new int[a.length]; 

     for (int d=bytesword-1;d>=0;d--){ 
      int i, j; 
      int count[]=new int[R+1]; 
      for (j=0;j<R;j++) count[j]=0; 
      for (i=l;i<=r;i++) 
       count[digit(a[i],d)+1]++; 
      for (j=1;j<R;j++) 
       count[j]+=count[j-1]; 
      for (i=l;i<=r;i++) 
       aux[count[digit(a[i],d)]++]=a[i]; 
      for (i=l;i<=r;i++) 
       a[i]=aux[i-1]; // <-- Line 19 
     } 
    } 

    public static void main(String[]args){ 
     int a[]=new int[]{3,6,5,7,4,8,9}; 
     radixLSD(a,0,a.length-1); 

     for (int i=0;i<a.length;i++){ 
      System.out.println(a[i]); 
     } 
    } 

    public static int digit(int n,int d){ 
     return (n>>d)&1; 
    } 
} 

Lors de l'exécution, il jette l'exception suivante:

java.lang.ArrayIndexOutOfBoundsException: -1 
at LSD.radixLSD(LSD.java:19) 
at LSD.main(LSD.java:29) 

Pourquoi est-il ainsi?

+0

Il serait utile si vous marquez quelle ligne est la ligne 19. Vous savez, pour nous aider à vous aider. – polygenelubricants

+0

je n'utilise pas IDE donc je ne peux pas comprendre où est la ligne 19 je suis witing programmes dans linux –

+1

Si vous ne pouvez pas compter jusqu'à 19, vous n'êtes probablement pas prêt à écrire des routines de tri. –

Répondre

1

Je ne connais pas assez le tri radix pour savoir quel devrait être votre code, mais la raison pour laquelle il échoue actuellement est assez claire. Vous appelez radixLSD et passer 0 pour l:

radixLSD(a,0,a.length-1); 

Lorsque vous arrivez à ce code:

for (i=l;i<=r;i++) 
    a[i]=aux[i-1]; 

Dans la première passe, i est réglé sur l (0), et vous essayez de faire aux[i-1], ou aux[-1], qui est hors limites

+0

merci mais je pense que dans le code quelque chose ne va pas j'ai écrit ce code à partir d'algorithmes en C++ robert sedgewick quelqu'un peut me donner un lien où ce code est écrit de manière plus élégante? –