[Algorithm] Quick Sort (C++)

Jihoon Kim·2024년 2월 5일
0
#include <iostream>

using namespace std;

// 배열의 특정 범위를 기준으로 나누는 함수
int partition(int arr[], int low, int high) {
    int pivot = arr[high];  // 피벗을 배열의 마지막 요소로 선택
    int i = low - 1;

    // 피벗보다 작은 요소는 왼쪽으로 이동, 큰 요소는 오른쪽으로 이동
    for (int j = low; j <= high - 1; j++) {
        if (arr[j] < pivot) {
            i++;
            // Swap을 직접 구현
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    // 피벗의 위치를 바꾸어 정렬된 상태로 만듭니다.
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

// 퀵 소트 함수
void quickSort(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() {
    // 테스트 배열
    int arr[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(arr) / sizeof(arr[0]);

    // 배열을 출력
    cout << "정렬 전 배열: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;

    // 퀵 소트 수행
    quickSort(arr, 0, n - 1);

    // 정렬된 배열 출력
    cout << "정렬 후 배열: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;

    return 0;
}
profile
AI/ML Research Engineer

0개의 댓글