基本思想
归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
C++代码
#include<iostream>
using namespace std;
void merge(int arr[],int l,int r,int m)
{
int help[r - l + 1];
int i = 0;
int p1 = l;
int p2 = m + 1;
while (p1 <= m && p2 <= r) {
help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while (p1 <= m) {
help[i++] = arr[p1++];
}
while (p2 <= r) {
help[i++] = arr[p2++];
}
for (i = 0; i <r - l + 1; i++) {
arr[l + i] = help[i];
}
}
void mergesort(int a[],int l,int r)
{
if(l>=r)
return ;
int mid=(l+r)/2;
mergesort(a,l,mid);
mergesort(a,mid+1,r);
merge(a,l,r,mid);
}
int main()
{
int a[8]={10,4,6,3,8,2,5,7};
int i;
mergesort(a,0,7);
for(i=0;i<8;i++)
cout<<a[i]<<" ";
return 0;
}
运行结果
来源:CSDN
作者:菜鸟tao
链接:https://blog.csdn.net/qq_33200155/article/details/104228293