본문 바로가기
c & c++/algorithm

계수정렬(Counting Sort)

by 일상코더 2022. 7. 12.

Goal

      - Counting Sort 에 대해 설명할 수 있다.

      - Counting Sort 과정에 대해 설명할 수 있다.

      - Counting Sort를 구현할 수 있다.

      - Counting Sort의 시간 복잡도를 계산 할 수 있다.


1. Counting Sort Summary

 

   - '범위 조건'이 있는 경우에 한해서 제일 빠른 알고리즘 O(N)

   - '크기의 기준으로' 세는 알고리즘


2. Counting Sort Processing

 

    - 원소의 크기 범위만큼 배열을 만든다

    - 각각 값들이 몇개인지 확인 후 그 개수만큼 출력

 


3. Counting Sort Coding

//계수정렬
#include <stdio.h>

int main(void)
{
	int i , j, temp;
	int count[5];
	int array[30] = {1, 3, 2, 4, 3, 2, 5, 3, 1, 2,
					 3, 4, 4, 3, 5, 1, 2, 3, 5, 2, 
					 3, 1, 4, 3, 5, 1, 2, 1, 1, 1};
	//count 배열에 있는 원소를 모두 0으로 만든다. 
	for( i = 0 ; i < 5; i++)
	{
		count[i] = 0;
	}
	//array 배열에 각각 인덱스를 count배열에 담기 
	for( i = 0 ; i < 30; i++)
	{
		count[array[i] - 1]++;
	}
	//정렬
	for(i = 0 ; i < 5; i++)
	{
		if(count[i] != 0)
		{
			for(j = 0; j < count[i]; j++)
			{
				printf("%d ", i + 1);
			}
		}
	  }  
	return 0;
 }

4. 계수 정렬 시간 복잡도

 

            - '범위 조건'이 있는 경우에 한해서 굉장히 빠른 알고리즘O(N)

            - 한정된 데이터 안에서는 빠르지만 정렬할 데이터 크기에 의존하는 알고리즘

'c & c++ > algorithm' 카테고리의 다른 글

순열과 조합  (0) 2023.01.18
재귀함수  (0) 2023.01.18
힙 정렬(Heap)  (0) 2022.07.11
병합 정렬(Merge Sort)  (0) 2022.07.01
퀵 정렬(Quick Sort)  (0) 2022.06.28

댓글