注:源代码和图片来自 合肥工业大学 计算机学院 方帅老师的课件
侵权必删
#include<iostream>
using namespace std;
//按照标号看
void merg(int a[], int lmin, int rmin, int rmax)/*10、以最后四个数为例,lmin为数组首地址,记为左标记,rmin为右边第一个地址,即2的地址,记为右标记,rmax为数组末尾的地址。*/
{
int temp;//11、定义一个可以临时变量储存值
while (lmin <= rmin - 1 && rmin <= rmax) //11、在未分解成单个数字且数组排序未完成时
{
if (lmin == rmin) return;//12、已被分解成单个数字,跳出函数
if (a[lmin] <= a[rmin]) lmin++;/*13、如果左标记的值小于右标记,则左标记后移,值不作任何变化(等于也是),进入下一轮。*/
else//14、此时左标记的值大于右标记
{
temp = a[rmin];//15、将右标记的值储存在临时变量中
for (int k = rmin; k >= lmin; k--)//16、新建一个k来复制右