【算法】快速排序法:Quicksort

来源:互联网 发布:tomcat下js文件未生效 编辑:程序博客网 时间:2024/04/30 17:40

/*  第一部分

快速排序算法是由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函数式中,递归运算,得到新数列。

运行测试

测试通过

0 0
原创粉丝点击