分而治之——快速排序(分割交换排序)
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)
与合并排序同阶
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)
与合并排序同阶
相关文章推荐
- 交换排序-快速排序
- java算法之三快速排序(交换排序)
- 快速排序(分而治之策略及C语言实现)
- 交换排序(冒泡排序--快速排序)
- 【排序】交换排序(冒泡排序、快速排序)
- Java排序算法总结之(二)——基于交换排序(冒泡排序、快速排序)
- 交换排序-快速排序
- 算法分析-交换排序(冒泡排序 & 快速排序)
- 交换排序—快速排序(Quick Sort)
- 交换排序(冒泡排序 and 快速排序)
- 算法排序-交换排序(冒泡排序,快速排序)
- 交换排序(冒泡排序、快速排序)
- 交换排序-------快速排序
- 交换排序--快速排序(C#)
- 交换排序——冒泡排序和快速排序
- 【Java常用排序算法】交换排序(冒泡排序、快速排序)
- ※交换排序(1)——快速排序(quick sort)
- 交换排序——快速排序
- 编程菜鸟的日记-初学尝试编程-整理内部排序(交换排序(冒泡排序和快速排序)、直接选择排序、直接插入排序,希尔排序)
- 交换排序 —— 快速排序