经典排序算法之归并排序(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); 
    } 
} 
相关推荐
qq_5139704411 分钟前
力扣 hot100 Day74
数据结构·算法·leetcode
John.Lewis44 分钟前
数据结构初阶(15)排序算法—交换排序(快速排序)(动图演示)
c语言·数据结构·排序算法
Cx330❀1 小时前
【数据结构初阶】--排序(三):冒泡排序、快速排序
c语言·数据结构·经验分享·算法·排序算法
效效超爱笑3 小时前
数据结构---链式结构二叉树
数据结构·算法
汤永红4 小时前
week1-[循环嵌套]蛇
数据结构·c++·算法
zhangzibiao4 小时前
LLM 与传统解析技术的融合:网页数据提取的演进与最佳实践
算法
墨染点香4 小时前
LeetCode 刷题【42. 接雨水】
算法·leetcode·职场和发展
楽码5 小时前
理解自动修复:编程语言的底层逻辑
后端·算法·编程语言
余_弦5 小时前
区块链中的密码学 —— 零知识证明
算法·区块链·以太坊
stone51955 小时前
TOTP算法与HOTP算法
c语言·物联网·算法·嵌入式·iot平台·智能门锁