只贴代码:
#include <iostream>
using namespace std;
void Merge(int *a,int start,int mid,int end)
{
int i=0,j=0,k=0;
int len1 = mid - start+1;
int len2 = end - mid;
int *L = new int[len1];
int *R = new int[len2];
j=0;
for(i=start;i<=mid;i++)
L[j++] = a[i];
j=0;
for(;i<=end;i++)
R[j++] = a[i];
for(k = start,i=0,j=0;i<len1&&j<len2;k++)
{
if(L[i] < R[j])
{
a[k] = L[i++];
}
else
a[k] = R[j++];
}
if(i<len1)
for(;i<len1;)
a[k++] = L[i++];
if(j<len2)
for(;j<len2;)
a[k++] = R[j++];
}
void MergeSort(int * a,int start,int end)
{
if(start < end)
{
int mid = (start+end) / 2;
MergeSort(a,start,mid);
MergeSort(a,mid+1,end);
Merge(a,start,mid,end);
}
}
void PrinfArray(int *a,int len)
{
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int main()
{
int a[]={3,2,1,4,5,6};
int len = sizeof(a)/sizeof(int);
MergeSort(a,0,len-1);
PrinfArray(a,len);
cout << "Hello world!" << endl;
return 0;
}
方法2:
void MergeSort1(int *a ,int *copyArray,int start,int end)
{
if(start == end)
{
copyArray[start] = a[start];
return ;
}
int len = (end - start)/2;
MergeSort1(copyArray,a,start,start+len);
MergeSort1(copyArray,a,start+len+1,end);
///前半段的最后一个
int i= start +len;
///后半段的最后一个
int j= end;
int index = end;
while(i>=start && j>=start+len+1)
{
if(a[i]>a[j])
copyArray[index--] = a[i--];
else
copyArray[index--] = a[j--];
}
while(i>=start)
{
copyArray[index--] = a[i--];
}
while(j>=start+len+1)
copyArray[index--] = a[j--];
}
void MergeSort1(int * a,int len)
{
if(a == NULL || len < 0)
return ;
int * copyArray = new int[len];
for(int i=0;i<len;i++)
copyArray[i] = a[i];
MergeSort1(a,copyArray,0,len-1);
}