반응형
정렬
- 선택 정렬
- 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨앞에 있는 데이터와 바꾸는 것을 반복한다
- 시간 복잡도는 O(n^2)
- 삽입 정렬
- 처리되지 않은 데이터를 하나씩 골라 적합한 위치에 삽입한다
- 시간 복잡도 O(n^2)
- 가장 빠른 경우는 O(n) 거의 정렬이 되었다고 가정할 시
- 퀵 정렬
- 기준데이터(pivot)을 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다
- 병합정렬과 더불어 프로그래밍 언어의 정렬 라이브러리에 근간이 되는 알고리즘이다
- 가장 기본적인 퀵 정렬은 첫 번째 데이터를 기준 데이터(Pivot)로 설정합니다
- 피봇을 기준으로 왼쪽은 큰값, 오른쪽은 작은값을 골라서 서로 바꿔주고 이 값들의 인덱스가 엇갈리는 경우 작은데이터와 피봇값의 위치를 변경한다
- 한 번 작업이 되면 분할(divide)를 할 수 있다, 반복하며 재귀적으로 퀵정렬은 동작한다
- 이상적인 경우 분할이 절반식 일어난다면 시간 복잡도는 O(NlogN)
- 최악의 경우는 O(N^2) , 이미 정렬되어있다고 가정할 경우
- 하지만 표준 라이브러리를 가지고 정렬을 사용하는 경우 O(NlogN)을 보장한다
- 계수 정렬
- 특정한 조건이 부합할 때만 사용할 수 있지만 매우 빠르게 동작하는 정렬 알고리즘
- 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을 때 사용 가능합니다.
- 데이터의 개수가 N, 데이터(양수) 중 최댓값이 K일 때 최악의 경우에도 수행시간 O(N+K)를 보장한다
- 동일한 값을 가지는 데이터가 여러개 존재할 때 효율적이다
- 특정한 조건이 부합할 때만 사용할 수 있지만 매우 빠르게 동작하는 정렬 알고리즘
'알고리즘 자료구조' 카테고리의 다른 글
[알고리즘] 투 포인터 (0) | 2021.03.14 |
---|---|
[자료구조] 스택, 큐 (파이썬) (0) | 2021.03.10 |
[알고리즘] 재귀 함수 (0) | 2021.03.08 |
[알고리즘] DFS와 BFS (깊이 우선탐색과 너비 우선탐색) (0) | 2021.03.07 |
[알고리즘] 이진탐색 알고리즘과 파라메틱서치 (0) | 2021.03.07 |