본문 바로가기
Data Structure & Algorithm

Quicksort from CTCI

by kmmguumnn 2019. 3. 2.

코딩 인터뷰 완전 분석(원제: Cracking the Coding Interview)에 소개된 Quicksort를 다시 한 번 정리 해보려고 한다.


기본적으로 퀵정렬은, 무작위로 한 원소를 정하고(이를 pivot이라 부른다), pivot보다 작은 원소들은 앞쪽에, 큰 원소들은 뒷쪽에 위치시킨다. 

  • 실행시간: 평균 O(n logn), 최악 O(n^2).
  • 메모리: O(logn)

배열 분할(partition)에 사용되는 원소(pivot)가 배열의 중간값(median) 혹은 중간값에 가까운 값이라면 좋은 성능이 나오겠지만, 반드시 그러리라는 보장은 할 수 없다. 즉 퀵정렬은 pivot을 어떻게 정하느냐에 따라 느리게 동작할 수도 있으며, 최악의 경우 수행시간이 O(n^2)이 될 수 있다.


이전에 작성했던 퀵정렬(Hoare's Scheme)과 다른 점은, pivot을 배열의 첫번째 원소가 아니라 중간에 위치한 원소로 정한다는 것이다. 왼쪽에서는 pivot보다 큰 원소, 즉 왼쪽에서 오른쪽으로 옮겨줘야 하는 원소를 찾고, 오른쪽에서는 pivot보다 작은 원소, 즉 오른쪽에서 왼쪽으로 옮겨줘야 하는 원소를 찾은 뒤 swap하는 방식이다.



'Data Structure & Algorithm' 카테고리의 다른 글

DFS(Depth-First Search; 깊이우선탐색)  (0) 2019.01.07
그래프(Graph)란?  (0) 2019.01.06
Counting Sort (계수 정렬)  (0) 2018.04.07
Quick Sort (퀵 정렬)  (0) 2018.04.06
Merge Sort (합병 정렬)  (0) 2018.03.30

댓글