> 백엔드 개발 > C++ > 본문

C++에서 병합 정렬 알고리즘을 사용하는 방법

WBOY
풀어 주다: 2023-09-19 13:24:24
원래의
616명이 탐색했습니다.

C++에서 병합 정렬 알고리즘을 사용하는 방법

C++에서 병합 정렬 알고리즘을 사용하는 방법

병합 정렬은 분할 정복 방법의 아이디어를 사용하여 정렬할 시퀀스를 두 개의 하위 시퀀스로 나누고 정렬합니다. 별도로 두 개의 Ordered 하위 시퀀스를 결합하여 Ordered 시퀀스로 병합됩니다. 아래에서는 C++ 언어를 사용하여 병합 정렬 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

  1. 알고리즘 아이디어

병합 정렬의 핵심 아이디어는 정렬할 시퀀스를 여러 하위 시퀀스로 분할한 다음 해당 하위 시퀀스에 대해 재귀 호출 정렬을 수행하고 마지막으로 정렬된 하위 시퀀스를 병합하는 것입니다.

구체적인 단계는 다음과 같습니다.
1) 시퀀스 길이가 1이면 이미 정렬되었음을 의미하고 직접 반환됩니다.
2) 시퀀스를 두 개의 하위 시퀀스로 동일하게 나누고 두 하위 시퀀스에 대해 재귀 호출 정렬을 수행합니다.
3) 두 개의 하위 시퀀스를 결합 순서 시퀀스가 ​​순서대로 병합됩니다

  1. 코드 예제

다음은 C++ 언어를 사용하여 병합 정렬 알고리즘을 구현하는 코드 예제입니다.

#include <iostream>
#include <vector>

using namespace std;

// 合并两个有序子序列
void merge(vector<int>& arr, int left, int mid, int right) {
    int i = left;    // 左子序列起始索引
    int j = mid + 1; // 右子序列起始索引
    int k = 0;       // 临时数组起始索引
    vector<int> temp(right - left + 1); // 临时数组

    // 比较两个子序列的元素,将较小的元素放入临时数组中
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) {
            temp[k++] = arr[i++];
        } else {
            temp[k++] = arr[j++];
        }
    }

    // 将剩余的元素复制到临时数组中
    while (i <= mid) {
        temp[k++] = arr[i++];
    }
    while (j <= right) {
        temp[k++] = arr[j++];
    }

    // 将临时数组的元素复制回原数组
    for (int m = 0; m < k; ++m) {
        arr[left + m] = temp[m];
    }
}

// 归并排序递归函数
void mergeSort(vector<int>& arr, int left, int right) {
    if (left < right) {
        int mid = (left + right) / 2;

        // 递归调用排序
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        // 合并两个有序子序列
        merge(arr, left, mid, right);
    }
}

// 归并排序函数
void mergeSort(vector<int>& arr) {
    mergeSort(arr, 0, arr.size() - 1);
}

int main() {
    vector<int> arr = {4, 6, 2, 8, 9, 1, 5, 3, 7};

    // 调用归并排序函数
    mergeSort(arr);

    // 输出排序结果
    for (int i = 0; i < arr.size(); ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}
로그인 후 복사

위 코드는 예제입니다. C++를 사용하여 병합 정렬 알고리즘을 구현합니다. 먼저 merge函数,用来合并两个有序子序列。然后定义了mergeSort函数,用来进行归并排序的递归调用。最后,在main函数中调用mergeSort 함수는 정렬할 시퀀스를 정렬하고 정렬된 결과를 출력합니다.

  1. 요약

병합 정렬 알고리즘은 시간 복잡도가 O(nlogn)인 효율적이고 안정적인 정렬 알고리즘입니다. 재귀 호출과 병합 작업을 통해 병합 정렬은 정렬할 시퀀스를 작은 블록으로 나누어 정렬한 다음 정렬된 하위 시퀀스를 정렬된 시퀀스로 병합할 수 있습니다. C++ 언어로 구현된 특정 코드 예제를 통해 병합 정렬 알고리즘의 구현 프로세스를 더 잘 이해하고 마스터할 수 있습니다.

위 내용은 C++에서 병합 정렬 알고리즘을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿