从零开始学习算法之归并排序[1](2.2归并排序)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学习算法之归并排序[1](2.2归并排序)相关的知识,希望对你有一定的参考价值。

归并排序思想为将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素重复步骤2,直到所有元素排序完毕。

下列代码为单次归并的函数,可作为模板用于代码中。

PS:其中前段为第p位到第q位,后段为第q+1位到第r位。

 1 void Merge(int p,int q,int r){
 2     int n1 = q - p + 1;
 3     int n2 = r - q;
 4     long long L[n1],R[n2];
 5     for(int i = 0;i < n1;i++) L[i] = A[i+p];
 6     for(int i = 0;i < n2;i++) R[i] = A[i+q+1];
 7     L[n1] = 100000000;R[n2] = 100000000;
 8     int i = 0;int j = 0;
 9     for(int k = p;k <= r;k++){
10             if(L[i] < R[j]) A[k] = L[i++];
11             else A[k] = R[j++];
12     }
13 }

 

以上是关于从零开始学习算法之归并排序[1](2.2归并排序)的主要内容,如果未能解决你的问题,请参考以下文章

高级排序算法之归并排序

十大排序之归并排序

高级排序算法之归并排序,快速排序

算法(第4版)-2.2 归并排序

排序算法之归并排序

重学数据结构和算法之归并排序快速排序