【算法】快速排序法:Quicksort

本文深入探讨了快速排序算法的原理、应用及其优化方法,包括C.A.R.Hoare教授提出的中心思想、示意图展示及参考代码实现,强调其在实际应用中的高效性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*  第一部分

快速排序算法是由C.A.R.Hoare教授于上世纪60年代提出的,它的中心思想是:

将一组数据分成两组,其中一组的所有元素值都要小于另一组,并在两组数据中不断的“左右划分”最终达到升序或降序的目的。

其中用于分隔两组数据的关键元素叫做中间数Quicksort 巧妙的调用自身进行递归演算,依次变化中间数,直到两组中的关键元素重合。

http://cacm.acm.org/system/assets/0000/0326/022509_CACMp38_AnInterview.large.jpg?1341312407&1235576938

                C.A.R.Hoare教授

Quicksort 也被称为“愉快的赌博”,因为它的“最坏情况运行时间”的成绩较差,但在大多数时候,它的性能是非常可观的!所以 尽管存在不稳定的因素,快速排序法也成为了排序算法最佳的实用选择。

*/

快排图

    快速排序示意图(图像来自百度)

参考代码:(运行环境 Linux,clang)

代码注释

      代码的关键点在于 quicksort 函数,其中,最外层的while循环体中 还包含两个while循环,用于查找在中间数右侧,并且小于中间数(L[ j ]);和在中间数左侧,并且大于中间数(L[ i ])的元素,如果找到了,就将这个元素与中间数(key)调换位置,依次调整元素的位置,如上述代码,L[ i ] 和 L[ j ] 不断向中间数靠拢,最终与中间数重合,结束循环,跳出最外层的while

      再将左右两组数组分别作为独立的数组重新带入quicksort函数式中,递归运算,得到新数列。

运行测试

测试通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值