#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
void merge(int arr[] , int L , int M , int R)//归并处理
{
int Left_size = M-L;//左数组长度
int Right_size = R - M + 1;//右数组长度
int left[Left_size];
int right[Right_size];
for(int i = L ; i < M ; i ++)//将目标数组拆分为左数组
left[i-L] = arr[i];
for(int i = M ; i <= R ; i ++)//将目标数组拆分为右数组
right[i-M] = arr[i];
int i = 0 , j = 0 , k = L;
while(i < Left_size && j < Right_size)//归并排序处理
{
if(left[i] < right[j])
{
arr[k] = left[i];
i ++;
k ++;
}
else
{
arr[k] = right[j];
j ++;
k ++;
}
}
while(i < Left_size)
{
arr[k] = left[i];
i ++;
k ++;
}
while(j < Right_size)
{
arr[k] = right[j];
j ++;
k ++;
}
}
void mergesort(int arr[] , int L , int R)//分治处理,二分思想
{
if(L==R)
return ;
else
{
int M = (L+R)/2;
mergesort(arr,L,M);//划分为子问题处理
mergesort(arr,M+1,R);
merge(arr,L,M+1,R);
}
}
int main(void)
{
int arr[] = {2,6,9,11,4,8,13,7};
int L = 0;
int R = 7;
mergesort(arr,L,R);
for(int i = 0 ; i <= 7 ; i ++)
cout<<arr[i]<<" ";
}