//------------------插入排序---------------------------------
template<typename T>
void insertion_sort(T a[],int n) //n: 数组大小
{
double temp;
int i;
for(int j=1;j<n;j++)
{
temp=a[j];
i=j-1;
while (i>=0&&a[i]>temp)
{
a[i+1]=a[i];
i--;
}
a[i+1]=temp;
}
}
//-----------------------------------------------
//---------------------归并算法-------------------------
template<typename T>
void merge(T a[],int p, int q , int n) //n: 数组大小
{
int n1=q-p+1;
int n2 = n-q;
int *l=new int[q-p+1];
int *r=new int[n-q];
for(int i =0 ;i<n1;i++)
{
l[i]=a[p+i];
}
for(int j =0 ;j<n2;j++)
{
r[j]=a[q+j+1];
}
l[n1]=2147483647;//当做正无穷
r[n2]=2147483647;
int ii=0;
int jj=0;
for(int k=p;k<=n;k++)
{
if(l[ii]<=r[jj])
{
a[k]=l[ii];
ii++;
}
else
{
a[k]=r[jj];
jj++;
}
}
}
//--------------------------------------------
template<typename T>
void merge_sort(T a[],int p,int r)
{
if(p<r)
{
int q= (p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);
}
}
//---------------------------------------------------
例子:归并
{
int a[100];
for(int i =0;i<100;i++)
{
a[i]=rand()%1000;
}
for(int i =0;i<100;i++)
{
printf("%d ",a[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
merge_sort(a,0,99);
for(int i =0;i<100;i++)
{
printf("%d ",a[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
return 0;
}