2010-05-31 2 views
0

У меня есть следующий код:Вопрос о LSD радикса рода

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; 
    } 
} 

Во время выполнения он бросает следующее исключение:

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

Почему это происходит?

+0

Это поможет, если вы отметите, какая линия - линия 19. Вы знаете, чтобы помочь нам помочь вам. – polygenelubricants

+0

Я не использую IDE, поэтому я не могу понять, где находится строка 19 Я занимаюсь программами в Linux –

+1

Если вы не можете сосчитать до 19, вы, вероятно, не готовы писать процедуры сортировки. –

ответ

1

Я не знаю достаточно о сортировке radix, чтобы узнать, что должен делать ваш код, но почему он в настоящее время терпит неудачу. Вы звоните radixLSD и прохождение 0 для l:

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

Когда вы получите этот код:

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

В первом проходе i установлен в l (0), и вы пытаетесь do aux[i-1], или aux[-1], что за пределами

+0

спасибо, но я думаю, что в коде что-то не так, я написал этот код из алгоритмов на C++ robert sedgewick может кто-нибудь дать мне ссылку где этот код написан более элегантным способом? –

Смежные вопросы