2012-11-19 3 views
0

대기열 배열에서 값을 제거하고 기수 정렬을 사용하여 int 배열에 배치하는 방법을 알 수 없습니다.기수 정렬 6 자리 음수가 아닌 배열

이 코드는 내가 지금 가지고 있습니다 :

public static void radixSort(int[] a) { 
    //Create an array of 10 empty array queues 
    Queue[] arr = new Queue[a.length]; 

    for (int i = 0; i < arr.length; i++) 
     arr[i] = new ArrayQueue(); 

    for (int place = 1; place <= 100000; place *= 10) { 
     for (int i = 0; i < a.length; i++) 
      arr[i].add(selectDigit(a[i],place)); 
     for (int j = 0; j < arr.length; j++) 
     a[j] = (Integer) arr[j].iterator().next();  
    } 
} 

장소 (1,101001000100000를) 있어야하는데 int 형이며 6 자리 숫자 등을에 장소를 말한다 684720에서 place = 1과 마찬가지로 selectDigit에서 반환 된 숫자는 0 (1 자리) 등이 될 것입니다. selectDigit는 매개 변수 (int digit, int place)를 사용합니다. 지금 나는 빈 배열, arr, 각 인덱스는 빈 arrayQueue 보유하고있다. 배열의 각 자릿수에 대해 적절한 1, 10, 100 등을 arr [i]의 적절한 색인에 추가합니다. 배열에서 각 값을 큐에서 다시 배열로 옮겨야한다고 확신 할 수는 없지만 어떻게 수행 할 수 있는지 잘 모르겠습니다.

편집 : 위의 수정 된 코드는 기본적으로 (정렬 전) 각 색인의 마지막 숫자가 있지만 10, 100, 1000 등은 아닌 다음 출력을 생성합니다 (여전히 올바르지 않습니다).

Array before sort: 602408, 183305, 695804, 934237, 285465, 860846, 196873, 139853, 444089, 594823, 436004, 812525, 302271, 104933, 811084, 350006, 115421, 582466, 192803, 163908, 380316, 734056, 595086, 314881, 784318, 959734, 834553, 982188, 272574, 98232 
Array after sort: 8, 5, 4, 7, 5, 6, 3, 3, 9, 3, 4, 5, 1, 3, 4, 6, 1, 6, 3, 8, 6, 6, 6, 1, 8, 4, 3, 8, 4, 2 
+0

이 소리는 처리가 끝났습니다 (너무 복잡합니다). 실제로 당신이 달성하려고하는 것은 무엇입니까? 즉, 영어로 구현에 대해 잠시 잊어 버렸습니다. – Bohemian

+0

6 자리 숫자의 배열을 가져 와서 가장 낮은 값에서 가장 높은 값으로 정렬합니다. – user1766888

+0

지금은 arr [i]에서 nullpointerexception을 얻고 있습니다. add (selectDigit (a [i], place)); 아마도 arr []을 제대로 초기화하지 않았기 때문일 수 있습니다. 올바르게 초기화하려면 어떻게해야합니까? – user1766888

답변

0

바퀴를 재발 명하지 마십시오. 방법을 삭제해야하며 대신 다음과 같이 호출해야합니다.

Arrays.sort(a);