일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SECS/GEM
- Spring
- 자바
- 파이썬
- Spring JPA
- regression
- Gem
- java
- SW Expert Academy
- modern c++
- SECS
- python
- MYSQL
- SWEA
- linux
- programmers
- Baekjoon
- spotify
- CS
- spring boot
- 회귀
- C++
- 백준
- SECS-II
- c
- 스포티파이
- Computer Science
- 회원가입
- 프로그래머스
- Spotify Api
Archives
- Today
- Total
비버놀로지
[Computer Science] 카운팅 정렬 본문
728x90
Counting Sort
- 계수정렬은 O(n)의 시간복잡도를 갖는다
- 일반적 상황에서 가장 빠른 정렬 알고리즘인 Quick Sort는 O(nlogn)을 가진다
- 그렇다면 대부분의 정렬이 필요한 상황에서 카운팅정렬을 사용하지 않고 퀵정렬을 사용할까??
정렬과정
- 첫번째로 각 숫자가 몇 번 등장하는지 세어준다.
- 등장 횟수의 누적합을 구해준다
여기서 누적합의 의미를 알아보자
숫자 0은 0번째 index에서 1번째 사이에 위치한다 ( 0 )
숫자 1은 1번째 index에서 4번째 사이에 위치한다 (1 , 2 , 3)
숫자 2는 4번째 index에서 4번째 사이에 위치한다 ( X )
숫자 3은 4번째 index에서 6번째 사이에 위치한다 (4, 5)
- 누적합을 이용해 정렬 (안정정렬을 만들기 위해 a의 맨 뒤에서부터 정렬을 시작한다)
- 맨 뒤의숫자인 1이 가지고 있는 누적합(4)를 찾아간다.
- 누적합을 한개 줄인다 (3) → 감소한 누적합 자리에 1을 삽입
- 맨 뒤의숫자에서 한칸앞인 3이 가지고 있는 누적합(5)를 찾아간다.
- 누적합을 한개 줄인다 (4) → 감소한 누적합 자리에 3을 삽입
정리
- Counting Sort(계수정렬)는 안정정렬이다.
- 데이터의 범위는 상대적으로 좁은데 비해 데이터의 갯수가 많은 경우 사용하기 적합하다
- 데이터의 범위가 상대적으로 넓은데 비해 데이터의 갯수가 적다면 매우 비효율적이다.
- -예를 들어 80, 50 , 30, 1000 이라는 배열이 있다면 배열을 1~1000까지 잡아야 한다.
- 시간복잡도는 모든 상황에서 O(N)이다.
728x90
'Computer Science (CS)' 카테고리의 다른 글
[Computer Science] 기수 정렬 (0) | 2023.11.26 |
---|---|
[Computer Science] 퀵 정렬 (0) | 2023.11.19 |
[Computer Science] 정렬(선택, 버블, 삽입) (0) | 2022.10.10 |
[Computer Science] 힙(Heap) (0) | 2021.10.14 |
[Computer Science] B-트리(B-Tree) (0) | 2021.10.14 |
Comments