4. 퀵정렬(quick sort)

  • 시간복잡도: O(nlog2n) (최악은 O(n^2))

  • 기준값(pivot) 을 정해서 그 값보다 큰 요소는 오른쪽에, 작은 요소는 왼쪽에 위치, 이를 반복하여 정렬

  • 기준값(pivot) 은 주로 처음, 중간, 끝 값 많이 사용

let arr = [1, 11, 66, 77, 55, 33, 88, 99]; // 입력 배열

// **기준값(pivot)**: 0번째 인덱스 값

// 기준값(pivot): 1
[~~11~~, 66, 77, 55, 33, 88, 99] + [1] + [11]
// 기준값(pivot): 66
[~~77~~, 55, 33, 88, 99] + [1] + [11] + [66] + [77]
// 기준값(pivot): 55
[~~33~~, 88, 99] + [1] + [11] + [33] + [55] + [66] + [77]
// 기준값(pivot): 88
~~[99]~~ + [1] + [11] + [33] + [55] + [66] + [77] + [88] + [99]

let arr = [1, 11, 66, 77, 55, 33, 88, 99]; // 입력 배열

function quickSort(arr) {
  let length = arr.length;
  if(length <= 1) {
    return arr;
  }
  let pivot = [arr.shift()]
  let group1 = [];
  let group2 = [];

  for(let i in arr) {
    if(arr[i] < pivot) {
      group1.push(arr[i])
    } else {
      group2.push(arr[i])
    }
  }

  console.log(`group1: ${group1}\n, group2: ${group2}\n, pivot: ${pivot}\n`)
  /*  group1: , group2: 11,66,77,55,33,88,99  , pivot: 1
      group1: , group2: 66,77,55,33,88,99, pivot: 11
      group1: 55,33, group2: 77,88,99, pivot: 66
      group1: 33, group2: , pivot: 55
      group1: , group2: 88,99, pivot: 77
      group1: , group2: 99, pivot: 88


  return quickSort(group1).concat(pivot, quickSort(group2))
}

console.log(quickSort(arr))
// [1, 11, 33, 55, 66, 77, 88, 99]

Last updated