快排的普通写法(递归)
时间复杂度(平均情况):nlog2(n)
int PartSort(int*arr,int first,int end) //分步排序函数
{
int tmp=arr[first]; //取第一个数作为基准值
while(first!=end)
{ //取左边作为基准值从右面开始判断
while(first<end && arr[end]>=tmp) //判断end指向的值是否大于基准值
end--; //如果大于,end向左移动
arr[first]=arr[end]; //否则将值放到左边
while(first<end && arr[first]<=tmp)//判断first指向的值是否小于基准值
first++; //如果小于,first向右移动
arr[end]=arr[first]; //否则将值放到右边
}
arr[first]=tmp; //指针相遇,将基准值放在该位置
return first; //返回相遇位置
}
void Quick(int*arr,int first,int end)//定义一个头指针和尾指针
{
if(first<end)
{
int mid = PartSort(arr,first,end);
Quick(arr,first,mid-1); //已经排好序的基准值不参与下次排序
Quick(arr,mid+1,end);