我正在尝试使用基数排序对300个随机数进行排序,这些随机数的格式为SSN numbers
。每次我使用此代码时,都会不断出现索引超出范围的错误。我想知道什么是解决问题的最佳方法。
public void countingSort(int[]A, int k){
int []B=new int[300];
int[]C= new int[k];
for(int i=0;i<k;i++) {
C[i]=0;
}
for(int j=1;j<A.length;j++) {
C[A[j]]=C[A[j]]+1;
}
for(int i=1;i<k;i++) {
C[i]=C[i]+C[i-1];
}
for(int j=A.length-1;j>0;j--) {
B[C[A[j]]]=A[j];
C[A[j]]=C[A[j]]-1;
}
for(int i=1;i<300;i++) {
System.out.println(B[i]);
}
}
public void RadixSort(int []A, int d) {
for(int i=1;A[i]>0;i*=10) {
countingSort(A,d);
}
}
答案 0 :(得分:0)
您的代码中至少有两个错误:
i public static void countingSort(int[]A, int k) {
int []B=new int[300];
int[]C= new int[k];
for(int i=0;i<k;i++) {
C[i]=0;
}
for(int j=1;j<A.length;j++) {
C[A[j]]=C[A[j]]+1;
}
for(int i=1;i<k;i++) {
C[i]=C[i]+C[i-1];
}
for(int j=A.length-1;j>0;j--) {
B[C[A[j]]]=A[j];
C[A[j]]=C[A[j]]-1;
}
for(int i=1;i<300;i++) {
System.out.println(B[i]);
}
}
// i <长度
public static void RadixSort(int []A, int d) {
for(int i=1;i< A.length && A[i]>0 ;i*=10) {
System.out.println("My d: "+d+ "i: "+i);
countingSort(A,d);
}
}