정렬과 검색 (Sorting and searching)
정렬은 순서대로 요소를 숫자순, 문자순, 오름차순, 내림차순 등으로 재배열 하는 것이다.
많은 기본 알고리즘이 O(n^2)
으로 돌아가고, 이는 코딩 테스트에서 사용되어선 안된다. 코딩 테스트
에서 정렬 알고리즘을 처음부터 구현할 필요도 없다. 대신 이진 탐색을 사용할 수 있도록 입력을 정렬해야 한다.
정렬된 배열에서 이진 탐색을 사용하면 O(n)
보다 빠르게 검색을 수행할 수 있다.
시간 복잡도
알고리즘 | 시간 복잡도 | 공간 복잡도 |
---|---|---|
Bubble sort | O(n2) | O(1) |
Insertion sort | O(n2) | O(1) |
Selection sort | O(n2) | O(1) |
Quicksort | O(nlog(n)) | O(log(n)) |
Mergesort | O(nlog(n)) | O(n) |
Heapsort | O(nlog(n)) | O(1) |
Counting sort | O(n + k) | O(k) |
Radix sort | O(nk) | O(n + k) |
기법
정렬된 인풋
만약 주어진 시퀀스가 정렬되어있다면 이진 탐색이 가장 먼저 해봐야 할 것이다.
제한된 범위의 인풋 정렬
계수 정렬은 미리 값의 범위를 알고 있을 경우 사용할 수 있다.
필수 문제
추천 연습 문제
- LeetCode
참조
Do it 알고리즘 코딩 테스트 - Java 편
Array cheatsheet for coding interviews | Tech Interview Handbook