高级排序之快速排序 O(n*logn)
来源:互联网 发布:mac上好用的播放器字幕 编辑:程序博客网 时间:2024/04/26 19:48
毫无疑问,快速排序是最流行的排序算法,因为有充足的理由,在大多数情况下,快速排序都是最快的,执行时间为O(N*logN)级。(这只是对内部排序或则说随即存储器内的排序而言,对于在磁盘文件的数据进行排序,其他的排序算法可能更好。)快速排序是在1962年由C.A.R.Hoare 发现的。
为了理解快速排序算法,应该对划分分治的概念非常熟悉。快速排序算法本质上通过把一个数组划分为两个子数组,然后递归地调用自身为每个子数组进行快速排序来实现的。但是,对这个基本的设计还需要进行一些架构。算法还必须选择枢纽以及对小的划分区域进行排序。看过这个主要算法简化代码以后,还要对其进行求精。
正如大家看到图解一样,基本上是3个基本步骤
1.把数组或则子数组划分成左边(较小的关键字)的一组和右边(较大的关键字)的一组
2.调用自身对左边的一组进行排序
3.再次调用自身右边的一组进行排序
JAVA代码实现如下,尚未清楚算法思路的,看递归快速排序,条理清晰易懂.实际应用中使用非递归算法,递归可能因递归层数太多导致JVM虚拟机堆栈内存不足而抛出StackOverflowError,具体原因请看深入JAVA虚拟机,讲得很详细.而且递归层数太多需考虑函数调用消耗资源
- 高级排序之快速排序 O(n*logn)
- 高级排序:希尔排序 O(N*(logN)^2)
- 归并排序 O(N*logN)
- 挖掘算法中的数据结构(三):O(n*logn)排序算法之 快速排序(随机化、二路、三路排序) 及衍生算法
- 快速排序, 堆排序,归并排序【N*logN】
- 今天才搞清楚排序算法的O(N*logN)是什么意思
- 今天才搞清楚排序算法的O(N*logN)是什么意思
- 高级排序之快速排序
- 挖掘算法中的数据结构(二):O(n*logn)排序算法之 归并排序(自顶向下、自底向上) 及 算法优化
- 八大排序算法JAVA实现(时间复杂度O(n-logn)篇)
- 最坏情况下保证时间复杂度为N*logN的快速排序
- LCA <O(N logN, O(logN)>
- 【快速】排序, T(n) = O(nlgn),O(n^2) S(n) = O(lgn) --- 不稳定
- 快速幂 O(logn)
- 排序高级之交换排序_快速排序
- 数据结构之高级排序<希尔排序、快速排序>
- O(logn*2^logn)和O(n*logn)算法
- O(n)冒泡排序
- jquery学习第八番 Utilities 工具类
- 中间件
- android模拟器模拟定位GPS
- 跪求列管换热器CAD图
- asp.net Inherits、Src、CodeBehind区别
- 高级排序之快速排序 O(n*logn)
- java UUID生成唯一标识符
- 文字滚动特效
- 骆驼和阿拉伯人
- 我想要的生活
- OpenGL入门教程资源汇总
- 4 通过示例探索 F# 和 .NET 库
- 狼与牧羊人
- Verilog乘法