[c++] 퀵소트병합

정렬 알고리즘은 컴퓨터 과학에서 중요한 주제 중 하나입니다. 두 가지 널리 사용되는 정렬 알고리즘으로 퀵소트(Quick Sort)병합정렬(Merge Sort)이 있습니다. 두 알고리즘은 모두 빠르고 효율적으로 동작하여 대용량 데이터를 정렬하는 데 사용됩니다.

퀵소트(Quick Sort)

퀵소트는 분할정복 알고리즘의 한 예로, 비교 정렬을 기반으로 합니다. 먼저 배열에서 피벗(pivot) 요소를 선택하고, 피벗보다 작은 요소는 피벗의 왼쪽으로, 큰 요소는 오른쪽으로 이동시킵니다. 그런 다음 각 부분 배열에 대해 재귀적으로 이 과정을 반복하여 정렬을 완성합니다. 퀵소트는 공간 효율성이 뛰어나며 평균적으로 O(n log n)의 시간 복잡도를 가집니다.

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

병합정렬(Merge Sort)

병합정렬은 또 다른 분할정복 알고리즘으로, 전형적으로 재귀적으로 구현됩니다. 이 알고리즘은 배열을 반으로 나누고, 나뉜 배열들을 각각 정렬한 후, 병합(merge)하여 하나의 정렬된 배열을 만들어냅니다. 병합정렬은 안정적인 정렬 알고리즘이며 언제나 O(n log n)의 시간 복잡도를 가집니다.

void mergeSort(int arr[], int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
        merge(arr, l, m, r);
    }
}

두 알고리즘은 각자 장단점을 가지고 있으며, 사용하고자 하는 상황에 따라 선택되어야 합니다. 무엇보다도, 정렬 알고리즘을 선택할 때는 주어진 데이터 크기, 데이터의 초기 정렬 여부, 메모리 사용량 등을 고려해야 합니다.