归并排序
void Merge(int a[],int term[],int first,int last)
{
int mid = (first+last)>>1;
int i = first;
int j = mid + 1;
int k = 0;
while(i<=mid&&j<=last)
{
if(a[i]<=a[j])
term[k++] = a[i++];
else
term[k++] = a[j++];
}
while(i<=mid)
term[k++] = a[i++];
while(j<=last)
term[k++] = a[j++];
for(int i=0;i<k;i++)
{
a[first+i] = term[i];
}
}
void Mergesort(int a[],int term[],int first,int last)
{
int mid = (first+ last)>>1;
if(first<last)
{
Mergesort(a,term,first,mid);
Mergesort(a,term,mid+1,last);
Merge(a,term,first,last);
}
}
bool mergesort(int a[],int n)
{
int *p = new int[n];
if(p==NULL)
return false;
Mergesort(a,p,0,n-1);
delete []p;
return true;
}