알고리즘/나동빈 실전 알고리즘

퀵정렬(Quick Sort)

개발윗미 2021. 7. 16. 17:36

퀵정렬은 특정한 배열이 있을 때 그 배열의 원소들을 반복적으로 분할하는 것이다. 

 

즉, 퀵정렬은 특정한 피벗값(기준값)을 기준으로 왼쪽과 오른쪽으로 나누기 때문에 '분할 정복'이라고도 부른다.

 

[퀵 정렬의 시간 복잡도]

퀵 정렬의 시간 복잡도는 O(N * logN) 이다.

예를 들어, 1 2 3 4 5 6 7 8 9 10 와 같이 10개 수가 존재할 때 선택 정렬을 사용하게 되면 O(N^2) 이기 때문에

10 * 10 = 100 이 나온다.

하지만, 퀵 정렬을 사용하면 1 2 3 4 56 7 8 9 10 으로 분할하여서 N^2 이라고 했을 때 (5 * 5) + (5 * 5) = 50 이

나오기 때문에 결과적으로 훨씬 적은 수만큼 연산을 수행하게 된다. 

이렇게 수를 반으로 나누는 과정은 2씩 계속 나눈다는 점에서 logN이라고 할 수 있다. 이러한 원리에서 데이터의 갯수가

N개이고 반씩 나누어 수행되기 때문에 N * logN이 성립된다.

 

하지만 퀵 정렬은 최악의 경우에 N^2 까지 나올 수 있다. 즉, 퀵 정렬의 최악 시간 복잡도는 O(N^2) 이다.

[소감]

데이터의 개수가 굉장히 컸을 때 선택 정렬, 버블 정렬, 삽입 정렬을 사용하는 것보다 퀵 정렬을 통해 분할 하면서

 

정렬을 수행하면 훨씬 더 빠르게 처리될 수 있을 것 같다고 생각된다.


출처

https://blog.naver.com/ndb796/221226813382

 

5. 퀵 정렬(Quick Sort)

지난 시간까지 다루었던 선택 정렬, 버블 정렬, 삽입 정렬 알고리즘은 모두 시간 복잡도 O(N^2)을 가지는...

blog.naver.com

 

'알고리즘 > 나동빈 실전 알고리즘' 카테고리의 다른 글

힙정렬(Heap Sort)  (0) 2021.07.20
병합정렬(Merge Sort)  (0) 2021.07.20
삽입정렬(Insertion Sort)  (0) 2021.07.16
버블정렬(Bubble Sort)  (0) 2021.07.16
선택정렬(Selection Sort)  (0) 2021.07.16