1. 설명

  • pivot을 하나 설정하여 작은 값은 왼쪽, 큰 값은 오른쪽에 배치
  • 평균적으로 O(n log n), 최악의 경우 O(n²)
  • 메모리 추가 사용 없이 빠른 속도 제공 (제자리 정렬)

 

2. 코드

#include <iostream>
#include <vector>

using namespace std;

int partition(vector<int>& arr, int low, int high) {
    int pivot = arr[high];
    int i = low - 1;

    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            swap(arr[++i], arr[j]);
        }
    }
    swap(arr[i + 1], arr[high]);
    return i + 1;
}

void quickSort(vector<int>& arr, int low, int high) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high);
        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

int main() {
    vector<int> arr = {64, 25, 12, 22, 11};
    quickSort(arr, 0, arr.size() - 1);

    for (int num : arr) cout << num << " ";
}

'Algorithm' 카테고리의 다른 글

[프로그래머스] 문자열 내림차순으로 배치하기  (0) 2025.03.10
[정렬] 병합 정렬  (0) 2025.03.10
[정렬] 삽입 정렬  (0) 2025.03.10
[정렬] 선택 정렬  (0) 2025.03.10
[프로그래머스] 약수의 개수와 덧셈  (0) 2025.03.08

+ Recent posts