퀵 정렬(Quick sort)
분할 정복 알고리즘의 개념
분할 정복은 두 가지 단계를 거친다.
- 기본 단계를 해결한다. 이 부분은 가능한 간단한 문제여야 한다.
- 문제가 기본 단계가 될 때까지 나누거나 작게 만든다.
분할 정복 알고리즘의 종류
- 합병 정렬 (Merge Sort)
- 퀵정렬 (Quick Sort)
여기서는 퀵정렬에 대해 다룬다.
퀵정렬 (Quick Sort) - O(n log n)
- 피벗 기준, 피벗보다 작으면 왼쪽, 피벗보다 크면 오른쪽으로 보내버린다.
- 다 보내면 그 피벗을 왼쪽과 오른쪽의 중간으로 보내버린다.
- 피벗을 제외한 왼쪽 리스트와 오른쪽 리스트를 다시 정렬한다
- 그 리스트가 0이나 1이 될 때까지 반복한다.
소스 코드 (Javascript)
var arr = [4, 2, 3, 1, 5];
function quickSort(arr) {
if (arr.length === 0) {
return [];
}
var middle = arr[0];
var len = arr.length;
var left = [], right = [];
for (var i = 1; i < len; i++) {
if (arr[i] < middle) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(middle, quickSort(right));
}
console.log(quickSort(arr));