C++ 实现归并排序
原理:
代码:
#include <iostream>
using namespace std;
void Merge(int array[],int left,int middle,int right)
{
int length=right-left+1;
int *temparray=new int[length];
int p1=left;
int p2=middle+1;
int p=0;
while(p1<=middle&&p2<=right)
{
if(array[p1]<=array[p2])
{
temparray[p++]=array[p1++];
}
else
{
temparray[p++]=array[p2++];
}
}
while(p1<=middle)
{
temparray[p++]=array[p1++];
}
while(p2<=right)
{
temparray[p++]=array[p2++];
}
for(int i=0;i<length;i++)
{
array[i+left]=temparray[i];
}
delete[]temparray;
}
void MergeSort(int array[],int left,int right)
{
if(left<right)
{
int middle=(left+right)/2;
MergeSort(array,left,middle);
MergeSort(array,middle+1,right);
Merge(array,left,middle,right);
}
}
int main()
{
cout << "please input the length of array:" << endl;
int n;
cin>>n;
int *p=new int[n];
cout << "please input the data of array:" << endl;
for(int i=0;i<n;i++)
cin>>p[i];
cout << "执行MergeSort:" << endl;
MergeSort(p,0,n-1);
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
return 0;
}