基数排序与计数排序

时间:2019-04-28 06:41:54

标签: java

我正在尝试使用基数排序对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);
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码中至少有两个错误:

  1. 参数k>最大值ssn
  2. 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);
    }
}