快速排序(升序)
void qsort(int l,int r,int a[])
{
int l1=l,l2=r;
int mid=a[(l+r)/2];//找到中间的数
do
{
while(a[l1]<mid) l1++;//找到不符合要求的数,退出
while(a[l2]>mid) l2--;
if(l1<l2)//交换
{
swap(a[l1],a[l2]);
l1++;l2--;
}
}while(l1<l2);
if(l1<r) qsort(l1,r,a);
if(l2>l) qsort(l,l2,a);//继续排序
}
归并排序(升序)
void mosrt(int l,int r,int a[])
{
int temp[10000];
int mid=(l+r)/2;
msort(l,mid);
msort(mid+1,r);//分治
int l1=l,r1=mid+1,i=l;
while(l1<=mid&&r1<=r)
{
if(a[l1]<=a[r1])//将较小数填入数组
{
temp[i]=a[l1];
i++,l1++;
}
else
{
temp[i]=a[r1];
i++,r1++;
}
}
while(l1<=mid)//将剩余数填入数组
{
temp[i]=a[l1];
i++,l1++;
}
while(r1<=r)
{
temp[i]=a[r1];
i++,r1++;
}
for(int k=l;k<=r;k++)//重新复制
a[k]=temp[k];
}