经典排序算法之归并排序(Merge Sort)

**归并算法定义:**所谓归并排序是指将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(或有序表)。

这样的排序方法经常用于多个有序的数据文件归并成一个有序的数据文件。

归并排序相比较之前的排序算法而言加入了分治法的思想,其算法思路如下:

1.如果给的数组只有一个元素的话,直接返回(也就是递归到最底层的一个情况)

2.把整个数组分为尽可能相等的两个部分(分)

3.对于两个被分开的两个部分进行整个归并排序(治)

4.把两个被分开且排好序的数组拼接在一起

代码演示如下:

复制代码
void merge(int arr[], int l, int m, int r) 
{ 
    int i, j, k; 
    int n1 = m - l + 1; 
    int n2 =  r - m; 

    int L[n1], R[n2]; 

    for (i = 0; i < n1; i++) 
        L[i] = arr[l + i]; 
    for (j = 0; j < n2; j++) 
        R[j] = arr[m + 1+ j]; 

    i = 0; 
    j = 0; 
    k = l; 
    while (i < n1 && j < n2) 
    { 
        if (L[i] <= R[j]) 
        { 
            arr[k] = L[i]; 
            i++; 
        } 
        else
        { 
            arr[k] = R[j]; 
            j++; 
        } 
        k++; 
    } 
  
    while (i < n1) 
    { 
        arr[k] = L[i]; 
        i++; 
        k++; 
    } 
  
    while (j < n2) 
    { 
        arr[k] = R[j]; 
        j++; 
        k++; 
    } 
} 
  
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); 
    } 
} 
相关推荐
张人玉11 分钟前
C#`Array`进阶
java·算法·c#
MicroTech202536 分钟前
Bell不等式赋能机器学习:微算法科技MLGO一种基于量子纠缠的监督量子分类器训练算法技术
科技·算法·量子计算
苇柠1 小时前
Java数组补充v2
java·python·排序算法
success2 小时前
【爆刷力扣-链表】画图自见
算法
今晚一定早睡2 小时前
代码随想录-数组-移除元素
前端·javascript·算法
前端拿破轮3 小时前
面试官:二叉树的前中后序遍历,用递归和迭代分别实现🤓🤓🤓
数据结构·算法·leetcode
Gyoku Mint3 小时前
深度学习×第10卷:她用一块小滤镜,在图像中找到你
人工智能·python·深度学习·神经网络·opencv·算法·cnn
智者知已应修善业3 小时前
2021-07-21 VB窗体求范围质数(Excel复制工作簿)
经验分享·笔记·算法
C++chaofan4 小时前
45. 跳跃游戏 II
java·开发语言·数据结构·算法·leetcode·游戏·职场和发展
拾光拾趣录4 小时前
举一反三:合并 K 个有序链表的最小堆实现
前端·算法