问题描述:
给一个序列{3,2,5,8,4,7,6,9},先把各自升序的子序列都找出来:{3},{2,5,8},{4,7},{6,9};然后把相邻的两个有序子序列合并为一个新的有序子序列:{2,3,5,8},{4,6,7,9},然后继续合并相邻的有序子序列,直到只剩一个序列:{2,3,4,5,6,7,8,9}.
下面是代码实现:
PS:看到很多人都用数组来记录每个有序子数组的下标,个人觉得那样有点麻烦,于是就在寻找有序子数组的过程中边找边记下来,找到俩相邻有序数组就调用一次合并算法(Merge),接着去找下一次的相邻有序子序列,,,不过就是很多细节都是在调试代码的时候才考虑到的,代码看起来也很麻烦,背离初衷了哈哈哈哈哈
#include <iostream>
using namespace std;
void Merge(int c[], int d[], int l, int m, int r);
void NatureMergeSort(int a[], int n);
int main(void)
{
cout<<"请输入数组中元素的个数:";
int n;
cin>>n;