首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【算法 之归并排序 原理及案例】

【算法 之归并排序 原理及案例】

作者头像
flos chen
发布2026-01-23 18:33:46
发布2026-01-23 18:33:46
890
举报

归并排序(Merge Sort)

归并排序(Merge Sort)是一种分治(Divide and Conquer)策略的排序算法。它将一个大问题分解成两个或更多个相同或相似的小问题,递归地解决这些小问题,然后将这些小问题的解组合起来,形成原始问题的解。

归并排序的原理是:

  1. 分解:将数组分解成两个较小的子数组,直到子数组的大小为1。
  2. 递归进行排序并合并:递归地对子数组进行排序,并将已排序的子数组合并成一个大的有序数组,直到合并为1个完整的数组。

以下是归并排序的C++代码示例:

代码语言:javascript
复制
#include <iostream>  
#include <vector>  
  
// 合并两个有序数组  
void merge(std::vector<int>& arr, int left, int mid, int right) {  
    int n1 = mid - left + 1;  
    int n2 = right - mid;  
  
    // 创建临时数组  
    std::vector<int> L(n1), R(n2);  
  
    // 拷贝数据到临时数组  
    for (int i = 0; i < n1; i++)  
        L[i] = arr[left + i];  
    for (int j = 0; j < n2; j++)  
        R[j] = arr[mid + 1 + j];  
  
    // 合并临时数组回原数组  
    int i = 0, j = 0, k = left;  
    while (i < n1 && j < n2) {  
        if (L[i] <= R[j]) {  
            arr[k] = L[i];  
            i++;  
        } else {  
            arr[k] = R[j];  
            j++;  
        }  
        k++;  
    }  
  
    // 拷贝L[]的剩余元素  
    while (i < n1) {  
        arr[k] = L[i];  
        i++;  
        k++;  
    }  
  
    // 拷贝R[]的剩余元素  
    while (j < n2) {  
        arr[k] = R[j];  
        j++;  
        k++;  
    }  
}  
  
// 归并排序的主函数  
void mergeSort(std::vector<int>& arr, int left, int right) {  
    if (left < right) {  
        // 找到中点  
        int mid = left + (right - left) / 2;  
  
        // 对左半部分和右半部分分别进行排序  
        mergeSort(arr, left, mid);  
        mergeSort(arr, mid + 1, right);  
  
        // 合并两个已排序的部分  
        merge(arr, left, mid, right);  
    }  
}  
  
// 测试函数  
int main() {  
    std::vector<int> arr = {12, 11, 13, 5, 6, 7};  
    int n = arr.size();  
  
    std::cout << "Given array is \n";  
    for (int i = 0; i < n; i++)  
        std::cout << arr[i] << " ";  
  
    mergeSort(arr, 0, n - 1);  
  
    std::cout << "\nSorted array is \n";  
    for (int i = 0; i < n; i++)  
        std::cout << arr[i] << " ";  
  
    return 0;  
}

这段代码定义了两个函数:merge 用于合并两个已排序的子数组,mergeSort 是递归的归并排序函数。在 main 函数中,我们创建了一个待排序的数组,并调用了 mergeSort 函数进行排序。排序完成后,我们输出了排序后的数组。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 归并排序(Merge Sort)
  • 归并排序的原理是:
  • 以下是归并排序的C++代码示例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档