1.归并排序(Merge_Sort)
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void Merge(int a[],int p,int q,int r)
{
int n1=q-p+1; //a[p,q]与a[q+1,r]实现归并
int i,j,k;
int n2=r-q;
int *L=(int *)malloc(sizeof(int)*n1);
int *R=(int *)malloc(sizeof(int)*n2);
for(i=0;i<n1;i++)
L[i]=a[p+i];
for(j=0;j<n2 ;j++)
R[j]=a[q+j+1];
i=0;j=0;
for(k=p;k<=r;k++)
{
if(i==n1)
{a[k]=R[j++];continue;}
if(j==n2)
{a[k]=L[i++];continue;}
if(L[i]<=R[j])
a[k]=L[i++];
else
a[k]=R[j++];
}
}
void Merge_Sort(int a[],int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
Merge_Sort(a,p,q);
Merge_Sort(a,q+1,r);
Merge(a,p,q,r);
}
}
int main()
{
int a[]={1,2,3,6,5,4,3,2,5,7,8};
int i;
Merge_Sort(a,0,sizeof(a)/sizeof(a[0]));
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf("%d ",a[i]);
return 0;
}