1:归并排序算法
#include <iostream>
using namespace std;
//归并排序算法
//1一次归并算法
void Merge(int r[],int s,int m,int t)
{
int i,j,k,n1,n2;
n1=m-s+1;
n2=t-m;
int *left=NULL, *right=NULL;
left = (int *)malloc(sizeof(int)*(n1));
right = (int *)malloc(sizeof(int)*(n2));
for (i=0;i<n1;i++)
left[i]=r[s+i];
for (j=0;j<n2;j++)
right[j]=r[m+1+j];
i=j=0;
k=s;
while (i<n1&&j<n2)
{
if(left[i]<right[j])
r[k++]=left[i++];
else
r[k++]=right[j++];
}
for(; i<n1; i++)
r[k++] = left[i];
for(; j<n2; j++)
r[k++] = right[j];
}
//2 二次归并的递归实现
void MergeSort2(int r[],int s,int t)
{
int m;
if(s<t)
{
m=(s+t)/2;
MergeSort2(r,s,m);
MergeSort2(r,m+1,t);
Merge(r,s,m,t);
}
}
int main ()
{
int r[]={9,8,7,6,4,5,3,1,2,0};
MergeSort2(r,0,9);
for (int i=0;i<10;i++)
cout<<r[i]<<" ";
cout<<endl;
return 0;
}
这是一种稳定算法。