您的位置:首页 > 其它

分而治之——快速排序(分割交换排序)

2017-09-09 11:19 267 查看
快速排序:把数组第一个数作为枢纽项,把剩下的数与枢纽项比较,小的放在枢纽项前面,大的放在后面,分别形成两个子数组,子数组再重复以上的步骤。

void quicksort(int low,int hign)//快速排序
{
int pivotpoint;//枢纽点
if(hign>low)
{
partition(low,hign,pivotpoint);
quicksort(low,pivotpoint-1);
quicksort(pivotpoint+1,hign);
}
}
void partition(int low,int hign,int &pivotpoint)//分割 排序
{
int i,j,pivotitem;
pivotitem=s[low];
j=low;
for(i=low+1;i<=hign;i++;)
if(s[i]<pivotitem)
{

//交换两项
s[i]=s[i]^s[j+1];
s[j+1]=s[i]^s[j+1];
s[i]=s[i]^s[j+1];
j++;
}
pivotpoint=j;
s[low]=s[low]^s[j];
s[j]=s[low]^s[j];
s[low]=s[low]^s[j];
}

W(n)=n(n-1)/2∈Θ(n^2)
A(n)∈Θ(nlgn)

与合并排序同阶
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: