经典排序算法之归并排序(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); 
    } 
} 
相关推荐
!!!!8132 分钟前
蓝桥备赛Day1
数据结构·算法
Mr_Xuhhh2 分钟前
介绍一下ref
开发语言·c++·算法
夏鹏今天学习了吗6 分钟前
【LeetCode热题100(99/100)】柱状图中最大的矩形
算法·leetcode·职场和发展
啊阿狸不会拉杆12 分钟前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
Mr_Xuhhh13 分钟前
C++11实现线程池
开发语言·c++·算法
若水不如远方14 分钟前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法
only-qi21 分钟前
leetcode24两两交换链表中的节点 快慢指针实现
数据结构·算法·链表
多恩Stone24 分钟前
【3D AICG 系列-9】Trellis2 推理流程图超详细介绍
人工智能·python·算法·3d·aigc·流程图
sin_hielo25 分钟前
leetcode 110
数据结构·算法·leetcode
整得咔咔响26 分钟前
贝尔曼最优公式(BOE)
人工智能·算法·机器学习