반응형
  • 항목들의 순서를 결정하기 위해 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하여, 선형 시간에 정렬하는 효율적인 알고리즘

  • 제한사항
    - 정수나 정수로 표현할 수 있는 자료에 대해서만 적용 가능 : 각 항목의 발생 회수를 기록하기 위해, 정수 항목으로 인덱스 되는 카운트들의 배열을 사용하기 때문이다.
    - 카운트들을 위한 충분한 공간을 할당하려면 집합 내의 가장 큰 정수를 알아야 한다.

  • 시간복잡도 (n+k) : n은 리스트 길이, k는 정수의 최대값

구현코드

package array1;
import java.util.Arrays;

public class CountingSort {
	public static void main(String[] args) {
			int arr[] = {0,4,1,3,1,2,4,1};
			int m = Arrays.stream(arr).max().getAsInt(); //배열에서 최댓값을 찾아낸다.
			
			System.out.println("m="+m);
			
			int[] c= new int[m+1];
			int[] s= new int[arr.length];
		
			for (int i = 0; i < arr.length; i++)c[arr[i]]++;
			for (int i = 1; i < c.length; i++)c[i] += c[i-1];
			for (int i = 0; i < arr.length; i++) {
				c[arr[i]]--;
				s[c[arr[i]]] = arr[i];
			}
			System.out.println(Arrays.toString(arr));
			System.out.println(Arrays.toString(s));
	}

}
반응형

'1. 알고리즘 이론 > 3. 정렬' 카테고리의 다른 글

병합정렬(MergeSort)  (0) 2020.03.01
퀵정렬(QuickSort)  (0) 2020.03.01
삽입정렬(InsertionSort)  (0) 2020.03.01
선택정렬(SelectionSort)  (0) 2020.03.01
버블정렬(BubbleSort)  (0) 2020.03.01

+ Recent posts