JAVA/Sort 종류
카운팅 정렬(Counting Sort)
cjsong
2019. 2. 18. 22:57
카운팅 정렬(Counting Sort)
항목들의 순서를 결정하기 위해 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하여, 선형 시간에 정렬하는 효율적인 알고리즘
제한 사항
■ 정수나 정수로 표현할 수 있는 자료에 대해서만 적용 가능 : 각 항목의 발생 회수를 기록하기 위해, 정수 항목으로 인덱스 되는 카운트들의 배열을 사용하기 때문이다.
■ 카운트들을 위한 충분한 공간을 할당하려면 집합 내의 가장 큰 정수를 알아야 한다.
시간 복잡도
■ 시간 복잡도 O(n+k) : n은 리스트 길이, k는 정수의 최대값
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.Arrays; public class CountingSort { public static void main(String[] args) { int[] arr= {0,4,1,3,1,2,4,1}; int[] counts = new int[5]; //arr배열의 최댓값+1 만큼 배열의 크기 설정 (원래는 arr 배열에서 최댓값 구해서 counts 배열 크기 설정해줘야됨) int[] temp = new int[arr.length]; //정렬 배열 for (int i = 0; i < arr.length; i++) { //counts[i] = i의 발생 횟수 counts[arr[i]]++; } for (int i = 0; i < counts.length-1; i++) {//정렬된 집합에서 각 항목의 앞에 위치할 항목의 개수를 반영하기 위해 counts 원소를 조정 counts[i+1] += counts[i]; } for (int i =arr.length-1; i >=0; i--) { counts[arr[i]]--; temp[counts[arr[i]]] = arr[i]; } System.out.print(Arrays.toString(temp)); } } | cs |