반응형
설명
- 데이터 분포도가 한정적일 경우에 한해서 굉장히 빠른 정렬 알고리즘
- 시간 복잡도 : O(N)
- 참고
예시
- 초기값
- 3 3 2 2 1 2 5 5 4
- 각 데이터 개수 확인
- 3(2) 2(3) 1(1) 5(2) 4(1)
- 각 키를 기준으로 정렬
- 1(1) 2(3) 3(2) 4(1) 5(2)
- 각 개수만큼 반환
- 1 2 2 2 3 3 4 5 5
코드
public class Solution {
public static int[] sort(int[] data) {
Map<Integer, Integer> countMap = new HashMap<>();
int index = 0;
for (int number : data) {
countMap.put(number, countMap.getOrDefault(number, 0) + 1);
}
for (int number : countMap.keySet().stream().sorted().collect(Collectors.toList())) {
for (int i = 0; i < countMap.get(number); i++) {
data[index++] = number;
}
}
return data;
}
}
class SolutionTest extends Specification {
@Unroll
def "#data -> #result"() {
expect:
Solution.sort(data as int[]) == result
where:
data | result
[3, 3, 2, 2, 1, 2, 5, 5, 4] | [1, 2, 2, 2, 3, 3, 4, 5, 5]
}
}
반응형
'Development > Algorithm' 카테고리의 다른 글
[Algorithm] 깊이 우선 탐색(Depth First Search) (0) | 2020.12.28 |
---|---|
[Algorithm] 너비 우선 탐색(Breath First Search) (0) | 2020.12.28 |
[Algorithm] 힙 정렬(Heap Sort) (0) | 2020.12.28 |
[Algorithm] 병합 정렬(Merge Sort) (0) | 2020.12.28 |
[Algorithm] 퀵정렬(Quick Sort) (0) | 2020.12.28 |