Quick Sort Algorithm
퀵 정렬 알고리즘
퀵 정렬 알고리즘은 분할 정복 알고리즘을 기반으로 비교적 많이 사용하는 정렬 알고리즘이다. 기본적인 시간 복잡도는 O(NlogN)
이지만, 최악의 경우에는 O(N^2)
이 될 수도 있다.
특징
- 분할 정복 활용
- 시간 복잡도 :
O(NlogN)
구현 순서
- 특정한 값(Pivot)을 기준으로 잡아서,
- 오른쪽으로 큰 수를 검색하고,
- 왼쪽으로는 작은 수를 검색한 뒤,
- 검색된 큰 수와 작은 수를 Swap해주고, 1 ~ 4번을 반복!
- 오른쪽 검색과 왼쪽 검색이 교차가 되는 순간, Pivot과 작은 수를 Swap!
- 교체된 Pivot을 기준으로 왼쪽과 오른쪽이 나눠지고,
- 왼쪽 영역과 오른쪽 영역을 각각 1 ~ 4번을 반복!
Key Point
퀵 정렬
은 투 포인터
와 pivot 을 설정하여 집합 분리하여 정렬한다.
start < pivot
인 경우, start++
이동
end > pivot
인 경우, end--
이동
start > pivot & end < pivot
인 경우, start 와 end 를 swap! 하고, start++
, end--
이동
start == end
될 때까지 1 ~ 3
번 과정 반복
start == end
인 경우, start < pivot
이면 start + 1
위치에 pivot 를 swap! 하고, start > pivot
이면 start - 1
위치에 pivot 를 swap!
- 분리 그룹이 1개 이하가 될 때까지,
1 ~ 5
번 까지의 과정을 반복한다.
구현
Java 8 Collection 을 활요한 퀵 정렬 구현
출처