Udemy - 퀵 정렬
퀵 정렬이란?
병합 정렬과 비슷하게 분할과 재귀함수를 사용하여 정렬한다.
하지만 퀵 정렬에서의 분할(피버팅)은 병합에서의 분할과는 조금 다르다.
위에서 보이는 바와 같이 특정 피벗(pivot)숫자를 하나 고르고, 그 숫자를 기준으로 그 숫자보다 작은 수는 자신의 왼쪽으로 무작위로 보내고, 큰 수는 우측으로 무작위로 보낸다. 그리고 좌측 숫자들을 다시 포인터를 내려가며 순회 정렬하고 우측 또한 마찬가지로 정렬하면 된다. 쉽게 생각하면 피벗숫자를 기준으로 배열을 이등분 하고 각 배열들의 숫자들을 차례대로 정렬하는 것이다.
피벗 헬퍼 알고리즘 (step 1)
위에서 설명했듯이, 퀵정렬을 하기 위해선 피벗 헬퍼 함수를 활용해야 한다.
우선 특정 숫자 기준 작은 수들은 좌측으로, 큰 수들은 우측으로 옮겨준다.
기본 코드 예시
1 | function pivot(arr, start = 0, end = arr.length - 1) { |
퀵 정렬 구현 (step 2)
이제 pivot helper 함수를 구현해 뒀으니, 퀵 정렬 알고리즘만 구현하면 된다.
상당히 재귀 과정이 복잡하고 어렵다…
1 | // javascript에서는 함수 매개변수가 undefined(완전 처음 실행 시)일 경우에 default값을 아래와 같이 지정해줄 수 있다. |
퀵 정렬의 시간복잡도
시간 복잡도 : O(nlogn)
하지만, 퀵 정렬은 잘 정렬되어 있는 배열에 대해서는 비효율적일 수 있다