Counting Sort
(Wikipedia)을 구현하려고합니다.
유니버스 (가능한 문자 집합)이 정렬하려는 입력 크기에 비해 작 으면 잘 작동합니다.
비교적 쉽습니다. 이전에 유니버스의 올바른 순서를 알고 설정을 완료하면 Map
(순서를 유지하기 위해 LinkedHashMap
)으로 정렬되었습니다. 이 예에서는 우주를 [a, b, c, d, e]
으로 제한합시다.
마지막으로
String inputToSort = ...
for (char c : inputToSort.toCharArray()) {
// Increase counter by one
charToCount.put(c, charToCount.get(c) + 1);
}
당신은 단순히 이전에 알려진 올바른 순서에 Map
를 통과하고 각 캐릭터에게 종종 발생 금액 인쇄 :
StringBuilder sb = new StringBuilder();
// Every character
for (Entry<Character, Integer> entry : charToCount.entrySet()) {
// How often it occurred
for (int i = 0; i < entry.getValue(); i++) {
sb.append(entry.getKey());
}
}
String output = sb.toString();
을
LinkedHashMap<Character, Integer> charToCount = new LinkedHashMap<>();
charToCount.put('a', 0);
charToCount.put('b', 0);
charToCount.put('c', 0);
charToCount.put('d', 0);
charToCount.put('e', 0);
이제 당신은 모든 항목을 귀하의 input
통과 및 계산
물론 프로 시저를 약간 최적화 할 수는 있지만 일반적인 절차입니다. 링크 된 Wikipedia 기사는 더 많은 정보를 담고 있습니다.
예를 들어 실제로는 int
값을 Java에서 개 사용하여 올바른 순서를 추출 할 수 있습니다. 이것으로 전체 우주와 함께 Map
을 초기화 할 필요가 없으며 한 번도 발생하지 않는 물건을 빠뜨릴 수 있습니다.또한 Map
을 삭제하여 array
을 정의순으로 보존하고 컴퓨터에서 최대한 최적화 할 수 있습니다. char
에 대한 index
은 이전에 설명한대로 int
값을 기반으로합니다.
일반적으로 사용중인 프로그래밍 언어를 언급하고 태그를 추가하는 것이 좋습니다. – alfasin
죄송합니다. 내 머리가 너무 튀겨, 롤, 고정! –
'빈도'태그. 그것이 문자 인쇄에 관한 질문과 관련이 있습니까? 너는 질문이 명확하지 않다. 몇 가지 작업 코드를 추가하거나 몇 가지 입력 예제와 예상 출력을 추가하십시오 ... 적어도 당신이 무엇을하고 싶은지 추측 할 수는 없습니다. 한 번 더 돌려줘. – buildcomplete