无法弄清楚如何修复bug

时间:2013-12-02 04:14:28

标签: java arrays radix-sort

使用JAVA我试图通过基数排序对整数(升序)进行排序和排列,但似乎没有找出错误。

public class Ex_radix {
    public static void radixSort(int[] A) {
        int d = 0;
        for (int digit = 0; digit < A.length; digit++) {// Checks what is the
                                                        // maximum amount of
                                                    // digits in any number
        int num = A[digit];
        int counter = 0;
        while (num != 0) {
            num = num / 10;
            counter = counter + 1;
        }
        if (counter > d) {
            d = counter;
        }
    }
    System.out.println("this is the max number of digits: " + d);
    int[] B = new int[A.length];// Copying the array
    for (int j = 0; j < A.length; j++) {
        B[j] = A[j];
        System.out.println("this is cell " + j + ": " + B[j]);
    }
    int iteration = 1;//Starting sort
    while (iteration <= d) {
        for (int i = 1; i < B.length; i++) {
            if (B[i] % (10 ^ iteration) < B[i - 1] % (10 ^ iteration)) {
                int temp = A[i - 1];
                B[i - 1] = B[i];
                B[i] = temp;
            }
        }
        for (int i = 0; i < B.length; i++) {// Checking
            System.out.print(B[i] + ", ");
        }
        System.out.println();
        iteration = iteration + 1;
    }
}

public static void main(String[] args) {
    int[] C = { 329, 457, 657, 839, 436, 720, 355 };
    radixSort(C);
}
}

如果你运行它,你会看到它开始正常,但在第一次迭代中,下一个数字被复制。 我尝试了几种方法,但是可以想出来。

first iteratiom:457,657,839,436,839,355,720, 第二次迭代:457,657,436,657,355,720,720, 第三次迭代:657,436,657,657,720,720,720,

1 个答案:

答案 0 :(得分:0)

您获得重复的原因是:

 int temp = A[i - 1];
 B[i - 1] = B[i];
 B[i] = temp;

你从A获得临时值并将其设置为B.这将停止复制,但它不会修复你的排序。基数排序使用存储桶来确定排序顺序(这是第二个数组的原因),没有相互比较。你正在做一种修改后的交换。