2011-09-27 1 views
0

알파벳 정렬 순서를 사용하여 알파벳순으로 이름을 정렬하는 데 문제가 있습니다. 예를 들어 알파벳순으로 정렬하고 번호 입력을 0001 Alex Smith, Gregory John, Alex Smith, Adam Richard, Alex Ryan과 같이 추가한다고 가정합니다. 지금까지집계 정렬을 사용한 이름 정렬

아담 리차드
알렉스 라이언
알렉스 스미스
그레고리 존

내 코드 :

public class Names 
{ 
    //private static int[] c; 

public ArrayList<String> getUserInput() 
{ 
     ArrayList<String> names = new ArrayList<String>(); 
    Scanner in = new Scanner(System.in); 
    while (in.hasNext()) 
    { 
     names.add(in.next()); 
     System.out.println(names); 
    } 
     in.close(); 
    return names; 
} 
private static CountingSort(int A[], int B[], int k[]) 
{ 
    int i; 
    int C[0]; 
    for(i = 0; i <= k; i++){ 
     C[i]=0; 
    } 

    for(int j=1; j <= A.length;){ 
     C[A[j]] = C[A[j]] + 1; 
    }//C[i] now contains numbers of elements equals to i 
    for(int i=1; i < k; i++){ 
     C[i] = C[i] + C[i - 1]; 

    } 
    for(int j = A.length; j--){ 
    B[C[A[j]]] = A[j]; 
    C[A[j]] = C[A[j]] - 1; 
    } 
} 
} 
+0

[계산 방식] (http://en.wikipedia.org/wiki/Counting_sort)은 작은 입력 범위 (예 : 작은 정수)에만 유용합니다. 기수 정렬을 의미 했습니까? –

+0

언어는 무엇입니까? –

+0

crossposted http://www.daniweb.com/software-development/java/threads/384308 – mKorbel

답변

0

계산 종류의 잘못된 정렬 알고리즘은 출력이 순서에 있어야합니다 이 문제. 카운팅 정렬 알고리즘은 고정 된 범위에있는 정수 값을 정렬하도록 설계되었으므로 정렬 문자열에 적용 할 수 없습니다.

반면에 이 문제의 기수 정렬을 사용할 수 있습니다. 기수 정렬은 한 번에 한 자릿수의 문자를 정렬하여 작동하며 문자열 정렬에 매우 적합합니다. 기수 정렬에는 가장 중요한 자리수 기수 정렬과 최하위 자리 기수 정렬의 두 가지 일반 맛이 있습니다. 기수 정렬의 MSD 풍미는 계산 형을 연상시키지 않지만 LSD 기수 정렬은 한 번에 한 문자 씩 계산 분류를 사용하여 작동합니다. 카운팅 정렬을 꼭 사용해야하는 경우 LSD 기수 정렬을 옵션으로 조사하는 것이 좋습니다.