第一篇博客——快速排序
来源:互联网 发布:任子行网络审计 编辑:程序博客网 时间:2024/05/27 09:49
学的知识比较杂,所以决定如果有时间就写一写,一方面做备忘,一方面激励自己做笔记。
第一篇博客决定写”快排“。因为“快排”既不是很难的问题,也不是很简单。觉得还算适合做第一篇。
直接上代码:
def partition(array, p, r ): x = array[r] i = p - 1 for j in range(p, r): if array[j] <= x: i += 1 temp = array[i] array[i] = array[j] array[j] = temp temp = array[r] array[r] = array[i+1] array[i+1] = temp return i + 1def QuickSort( array, p, r ): if p < r: q = partition(array, p, r) QuickSort( array, p, q-1 ) QuickSort( array, p+1, r )if __name__ == '__main__': array = [10, 2, 5, 24, 33, 7, 6, 23, 9, 1] length = len(array) QuickSort( array, 0, length-1 ) print array
快排算法时间复杂度是O(nlgn),因为是“分治法”,无数博客都讨论过这个事儿。
此外,快排的精髓在于partition函数,变量j是顺着数组进行遍历,这样的好处在于符合代码的“空间局部性”,速度会更快。
当一个内存地址上的数被内存访问,这个数相邻地址的数和要访问的这个数会一起被送到Cache中,下次访问下一个地址的数时,就会被Cache命中,减少了访问内存的时间消耗。
而且,以linux系统为例,内存一般是需要进行分页管理。为了减少分页索引时延,CPU会有一个“快表”,数据段的空间局部性也会增加“快表”的命中率,从而增加程序运行速度。
最后,“快排”也是不需要额外的空间。归并排序的merge就需要额外同样数组大小的空间,而快排不需要。
总之, 快排在算法上既有分治思想的加持,又符合计算机程序运行机制,又不占空间的精妙方法。
0 0
- 第一篇博客——快速排序
- 小昆哥—>博客第一篇
- 博客更新——第一篇
- 第一篇博客——maven笔记
- 第一篇博客——个人感悟
- 第一篇博客—处女贴
- 第一篇博客—markdown入门
- 第一篇博客——写博客的目的
- 算法之排序-----排序第一篇 快速排序
- 建立博客第一篇技术文章——奋斗
- 狂龙的第一篇博客——好友必读!
- 我的第一篇博客——宣言
- javascript模拟时钟 ——我的第一篇博客
- 超群梦幻——我的第一篇博客
- 黑马程序员——我的第一篇博客
- 委托与事件——我的第一篇博客
- 黑马程序员——我的第一篇博客文章
- 编程日记——第一篇技术博客
- 关于shiro框架的一些想法
- 概率图模型6:条件随机场(1)
- 备忘录之页面弹框在子窗口中传递参数或改变参数到父窗口
- 克隆二叉树
- java中的继承
- 第一篇博客——快速排序
- 4月27日,ParseURL,每日20行。
- opengles 开发l流程
- Codeforces 793 D. Presents in Bankopolis
- 508
- AngularJS快速入门4--内置指令
- SSAN之VAAI特性功能实现剖析
- java下开源报表工具(JasperReport)调研记录
- spark厦大-------主成分分析(PCA)