void quick_sort(int arr[],int left,int right)
{
if(left>=right) return ; //只有一个数时是有序的,递归出口
int x=arr[(left+right)>>1]; //取一个值作比较 此处取中间的数
int i=left-1, j=right+1;
while(i<j)
{
while(arr[++i]<x);
while(arr[--j]>x);
if(i<j)swap(arr[i],arr[j]);
}
quick_sort(arr,left,j); //左边快排
quick_sort(arr,j+1,right); //同理右边快排
}
void merge_sort(int arr[],int l,int r)
{
if(l>=r) return ; //当只有一个数时是有序的
int mid=(l+r)>>1; //取中间位置
merge_sort(arr,l,mid); ///左边归并
merge_sort(arr,mid+1,r); ////右边归并
int *temp=(int*)malloc(sizeof(int)*(r-l+1)); //用一个零时数组合并两个数组
int k=0,i=l,j=mid+1;
while(i<=mid && j<=r)
if(arr[i]<=arr[j]) temp[k++]=arr[i++];
else temp[k++]=arr[j++];
while(i<=mid) temp[k++]=arr[i++]; //左边还有数多继续放入
while(j<=r) temp[k++]=arr[j++]; //同理
for(i=l,j=0; i<=r; i++,j++) arr[i]=temp[j]; //把排好序的数组放到arr中
free(temp); //释放空间
}
原文:https://www.cnblogs.com/lkfsblogs/p/12682021.html