快排算法
void fastsort(int q[],int l,int r){
if(l>=r)return ; //跳出条件
int i=l-1,j=r+1,x=q[i+j>>1]; //基准元素
while(i<j){
do i++;while(q[i]<x); //从左向右开始找一个大于等于x的数值
do j--;while(q[j]>x); //从右向左开始找一个小于等于x的数值
if(i<j)swap(q[i],q[j]);
}
fastsort(q,l,j),fastsort(q,j+1,r); // 左区间递归快速排序 右区间递归快速排序
}
归并算法
void guisort(int q[],int l,int r){
if(l>=r)return ; //跳出条件
int mid=l+r>>1; //中间的值
guisort(q,l,mid); //对 a[low,mid]进行排序
guisort(q,mid+1,r); //对 a[mid+1,r]进行排序
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r)
if(q[i]<=q[j])tmp[k++]=q[i++];
else tmp[k++]=q[j++]; //按从小到大存放在tmp数组里面 while(i<=mid)tmp[k++]=q[i++]; //如果j序列结束,将剩余的i序列补充在tmp数组中 while(j<=r)tmp[k++]=q[j++]; //如果i序列结束,将剩余的j序列补充在tmp数组中
for(int i=l,j=0;i<=r;i++,j++)q[i]=tmp[j]; //将tmp数组的值传递给数组p
}