알고리즘 별 정리
- 선택정렬
- 방법 : "남은 것 중에서 가장 작은 값을 앞으로 가져오기" 를 반복한다.
- 시간복잡도 : O(N^2)
- 삽입정렬
- 방법 : 하나씩 보면서 그 지점의 왼쪽은 정렬이 되었다고 생각하고 왼쪽의 수와 비교하며 적절한 위치에 놓는 방법
- 시간복잡도 : O(N^2)
- 특징 : 왼쪽이 정렬되었다고 생각하고 진행하기 때문에, 거의 정렬이 되어있다면 매우 빠르게 동작한다.
- 퀵 정렬
- 방법 : pivot보다 큰 데이터와 작은 데이터의 위치를 바꾼다.
- 시간복잡도 : O(N log N)
- 특징 :
1. pivot을 기준으로 분할함 -> 데이터의 범위가 줄어듦. 그래서 빠르다
2. 최악의 경우(이미 정렬된 배열일 때) O(N^2)의 시간복잡도를 가진다. -> 양쪽으로 분할이 안이루어짐
- 계수 정렬
- 방법 : 가장작은 값 ~ 가장 큰 값 범위를 담을 수 있는 배열을 생성하고 각 수가 몇번 나오는지 카운팅한다
- 시간복잡도 : O(N + K)
- 특징 :
1. 타입이 정수형일때만 사용 가능하다.
2. 경우에 따라 심각한 비효율성 발생가능( ex. 데이터가 0, 999999만 존재할때)
3. 동일한 값을 가지는 데이터가 여러개 등장할때 효율적이다. (ex. 성적)
어떤상황에서 어떤 알고리즘을 선택해야할까?
알고리즘 | 시간복잡도 | 좋은 상황 |
선택정렬 | O(N^2) | 단순한 구현이 필요할때 |
삽입정렬 | O(N^2) | 데이터가 거의 정렬되어 있을때 |
퀵정렬 | O(N log N) | 거의 정렬된 배열이 아닐때 ( 대부분의 경우) |
계수 정렬 | O(N + K) | 데이터가 정수일때, 중복된 수가 많을 때 |
'Algorithm > Sort' 카테고리의 다른 글
[핵심 유형] 카드 정렬 (0) | 2021.02.03 |
---|---|
[카카오 코테] 실패율 (0) | 2021.02.03 |