2013-12-02 12 views
0

Использование JAVA Я пытаюсь сортировать и массивы целых чисел (по возрастанию) по методу radix, но, похоже, не работает ошибка.Невозможно выяснить, как исправить ошибку

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

Если вы запустите его, вы увидите, что оно начинается нормально, но в течение первой итерации и последующие числа копируются. Я пробовал несколько методов, но coudlnt понять это.

первый iteratiom: 457, 657, 839, 436, 839, 355, 720, второй итерации: 457, 657, 436, 657, 355, 720, 720, третьей итерации: 657, 436, 657, 657 , 720, 720, 720,

+1

'^' не является возвышением. Вы можете использовать 'Math.pow', но я бы сохранил еще одну переменную' powerOf10', которая содержит «10 для мощности _iteration_». Затем, когда вы добавляете 1 к 'итерации', я готов поспорить, вы можете догадаться, что делать с' powerOf10'. – ajb

+0

правый. Я исправил это, глупо от меня. но он все еще не решает проблему. im все еще получая coppied числа. – orzys

+0

У кого-нибудь есть идеи? – orzys

ответ

0

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

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

вы получаете темп от а и установить его в B. Это позволит остановить дублирование, но не будет исправлять ваш вид. Для сортировки Radix используется ведра для определения порядка сортировки (это причина для второго массива), нет сравнения друг с другом. Вы делаете своего рода измененный своп.

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