algoalgo-world
algoalgo-world/sort/quick-sort
sort/quick-sort

퀵 정렬

최선
O(n log n)
평균
O(n log n)
최악
O(n^2)
공간
O(log n)
안정성
불안정
방식
비교 기반

언어를 고르면 코드가 열린다

def quick_sort(a, lo=0, hi=None):
    if hi is None:
        hi = len(a) - 1
    if lo >= hi:
        return
    pivot = a[hi]
    cut = lo
    for i in range(lo, hi):
        if a[i] < pivot:
            a[i], a[cut] = a[cut], a[i]
            cut += 1
    a[cut], a[hi] = a[hi], a[cut]
    quick_sort(a, lo, cut - 1)
    quick_sort(a, cut + 1, hi)
function quickSort(a, lo = 0, hi = a.length - 1) {
  if (lo >= hi) return;
  const pivot = a[hi];
  let cut = lo;
  for (let i = lo; i < hi; i++) {
    if (a[i] < pivot) {
      [a[i], a[cut]] = [a[cut], a[i]];
      cut++;
    }
  }
  [a[cut], a[hi]] = [a[hi], a[cut]];
  quickSort(a, lo, cut - 1);
  quickSort(a, cut + 1, hi);
}
static void swap(int a[], int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

void quick_sort(int a[], int lo, int hi) {
    if (lo >= hi) return;
    int pivot = a[hi];
    int cut = lo;
    for (int i = lo; i < hi; i++) {
        if (a[i] < pivot) swap(a, i, cut++);
    }
    swap(a, cut, hi);
    quick_sort(a, lo, cut - 1);
    quick_sort(a, cut + 1, hi);
}
void quick_sort(std::vector<int>& a, int lo, int hi) {
    if (lo >= hi) return;
    int pivot = a[hi];
    int cut = lo;
    for (int i = lo; i < hi; i++) {
        if (a[i] < pivot) std::swap(a[i], a[cut++]);
    }
    std::swap(a[cut], a[hi]);
    quick_sort(a, lo, cut - 1);
    quick_sort(a, cut + 1, hi);
}
static void QuickSort(int[] a, int lo, int hi) {
    if (lo >= hi) return;
    int pivot = a[hi];
    int cut = lo;
    for (int i = lo; i < hi; i++) {
        if (a[i] < pivot) {
            (a[i], a[cut]) = (a[cut], a[i]);
            cut++;
        }
    }
    (a[cut], a[hi]) = (a[hi], a[cut]);
    QuickSort(a, lo, cut - 1);
    QuickSort(a, cut + 1, hi);
}
static void swap(int[] a, int i, int j) {
    int t = a[i];
    a[i] = a[j];
    a[j] = t;
}

static void quickSort(int[] a, int lo, int hi) {
    if (lo >= hi) return;
    int pivot = a[hi];
    int cut = lo;
    for (int i = lo; i < hi; i++) {
        if (a[i] < pivot) swap(a, i, cut++);
    }
    swap(a, cut, hi);
    quickSort(a, lo, cut - 1);
    quickSort(a, cut + 1, hi);
}
돌려 보고 코드도 본다