#include <iostream>
using namespace std;
//将两个有序数组合并
void merge_array(int a[],int m,int b[],int n,int c[])
{
int i=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<m)
c[k++]=a[i++];
while(j<n)
c[k++]=b[j++];
}
//将有二个有序数列a[first...mid]和a[mid...last]合并
void merge(int a[],int first,int mid,int last,int temp[])
{
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m&&j<=n)
{
if(a[i]<=a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m)
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];
for(i=0;i<k;i++)
a[first+i]=temp[i];
}
void merge_sort(int a[],int start,int end,int temp[])
{
if(start<end)
{
int mid=(start+end)/2;
merge_sort(a,start,mid,temp);
merge_sort(a,mid+1,end,temp);
merge(a,start,mid,end,temp);
}
}
int main()
{
int a[9]={8,4,5,7,3,9,1,2,6};
int*p=new int[9];
if(p==NULL) return false;
merge_sort(a,0,8,p);
for(int i=0;i<9;i++)
cout<<a[i]<<" ";
delete[] p;
return 0;
}
using namespace std;
//将两个有序数组合并
void merge_array(int a[],int m,int b[],int n,int c[])
{
int i=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<m)
c[k++]=a[i++];
while(j<n)
c[k++]=b[j++];
}
//将有二个有序数列a[first...mid]和a[mid...last]合并
void merge(int a[],int first,int mid,int last,int temp[])
{
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m&&j<=n)
{
if(a[i]<=a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m)
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];
for(i=0;i<k;i++)
a[first+i]=temp[i];
}
void merge_sort(int a[],int start,int end,int temp[])
{
if(start<end)
{
int mid=(start+end)/2;
merge_sort(a,start,mid,temp);
merge_sort(a,mid+1,end,temp);
merge(a,start,mid,end,temp);
}
}
int main()
{
int a[9]={8,4,5,7,3,9,1,2,6};
int*p=new int[9];
if(p==NULL) return false;
merge_sort(a,0,8,p);
for(int i=0;i<9;i++)
cout<<a[i]<<" ";
delete[] p;
return 0;
}