快速排序(QuickSort)算法 C语言实现
文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
下午做题的时候用到了快速排序(QuickSort),只不过这次换成C语言实现。草草写了一个,感觉很乱,改。。。改完还乱。。。继续改。。。最后结果就是如下这个快速排序(QuickSort)算法的C语言实现。
void qsort(int s[], int l, int r)
{
int i, j, x;
if (l < r)
{
i = l;
j = r;
x = s[i];
while (i < j)
{
while(i < j && s[j] > x) j--; /* 从右向左找第一个小于x的数 */
if(i < j) s[i++] = s[j];
while(i < j && s[i] < x) i++; /* 从左向右找第一个大于x的数 */
if(i < j) s[j--] = s[i];
}
s[i] = x;
qsort(s, l, i-1); /* 递归调用 */
qsort(s, i+1, r);
}
}
我的这个算法实现是每次从数组头部取数字作为基准,看起来好理解一些,呵呵~我是这么认为的。
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序(QuickSort)的最坏时间复杂度应为0(n2),最好时间复杂度为O(nlgn),平均时间复杂度为O(nlgn)。快速排序(QuickSort)在系统内部需要一个栈来实现递归。若每次划分较为均匀,则其递归树的高度为O(lgn),故递归后需栈空间为O(lgn)。最坏情况下,递归树的高度为O(n),所需的栈空间为O(n)。
您可能还对以下内容感兴趣
收藏、分享这篇文章! 用 RSS feed 订阅本博客 什么是订阅? Trackback评论
3 条评论 关于 “快速排序(QuickSort)算法 C语言实现”
发表您的评论[审核后显示]












STL里面有一个算法叫做sort(),使用的是随机化的快速排序,不存在算法效率退化的问题。
int a[5] = {1,3,6,2,5};
sort(a, a + 5);
这时a就是升序排列的了。
Slyar 回复 于 10月 12th, 2008 08:51:
恩,这个我有听说。
有点意思。。。博客很有技术含量。。。支持博主