#include <iostream>
using namespace std;
#define maxlen 101
//归并排序核心思想:
/*
归并排序是基于分治思想,先将问题分解成一个一个的小问题,(mergersort的作用)然后再把解合并起来(merger的作用)
*/
void merger(int *array,int begin,int middle,int end)
{
int tmp[maxlen];
int k=0;
int i=begin;
int j= middle+1;
while(i<=middle&&j<=end)
{
if(array[i]<=array[j])
{
tmp[k++] = array[i++];
}else
{
tmp[k++] = array[j++];
}
}
while(i<=middle)
{
tmp[k++] = array[i++];
}
while(j<=end)
{
tmp[k++] = array[j++];
}
for(int i=0;i<k;i++)
{
array[begin+i] = tmp[i];
}
}
void mergerSort(int *array,int begin,int end)
{
if(begin <end)
{
int middle = (begin+end)/2;
mergerSort(array,begin,middle);
mergerSort(array,middle+1,end);
merger(array,begin,middle,end);
}
return;
}
int main()
{
int arrays[]={3,2,1,4,5,5};
mergerSort(arrays,0,5);
for(int i=0;i<=5;i++)
{
cout<<arrays[i]<<" ";
}
cout<<endl;
return 0;
}