您的位置:首页 > 编程语言

《算法导论:快速排序》:这种很优秀,代码简单,效率高,并且划分标准.

2010-06-30 13:23 330 查看
#include <stdio.h>

int partition(int *A,int p,int r)
{
int x=A[r];
int i=p-1;
for(int j=p;j<=r-1;j++)
{
if(A[j]<=x)
{
i=i+1;
int t=A[i];
A[i]=A[j];
A[j]=t;
}
}
A[r]=A[i+1];
A[i+1]=x;
return i+1;
}

void quickSort(int *A,int p,int r)
{
if(p<r)
{
int q=partition(A,p,r);
quickSort(A,p,q-1);
quickSort(A,q+1,r);
}
}

int main()
{
int input[10]={7,6,5,4,1,1,22,45,11,12};
quickSort(input,0,9);
for(int i=0;i<10;++i)
{
printf("%d ",input[i]);
}
return 0;
}


 

这个快速排序,维护了四段区间,一个是p...i 这一段区间, 它们均小于等于A[r] ,一段是i+1...j-1, 这一段均大于A[r], 还有一段是未分类的元素,范围是j.....r-1,最终是r, A[r]是划分关键字.

 

0(n)时间可以完成划分,循环结束后,将关键字与第一个大于A[r]的元素互换,这样就满足p...i+1均小于等于A[r],i+2....r均大于A[r].

 

这种实现方法代码间断,不易出错,而且partition()可以单独用于数组的划分,左边的元素一定是小于等于关键字的,右边的元素一定是大于关键字的, 对于找第K大元素等算法思想是强大支持. 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 input include
相关文章推荐