第一篇博客——快速排序

原创 2017年04月27日 22:25:08

         学的知识比较杂,所以决定如果有时间就写一写,一方面做备忘,一方面激励自己做笔记。

         第一篇博客决定写”快排“。因为“快排”既不是很难的问题,也不是很简单。觉得还算适合做第一篇。

         直接上代码:

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 + 1

def 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就需要额外同样数组大小的空间,而快排不需要。


         总之, 快排在算法上既有分治思想的加持,又符合计算机程序运行机制,又不占空间的精妙方法。


 




list list 怎么根据一个值对这个List重新排序

---------给--力--的--分--割--线------------------- 正文: 这是两个list得出来得结果集用得sql "select do.id, c.startTime ,...
  • zgf1991
  • zgf1991
  • 2012年09月06日 18:44
  • 4996

第一篇英文论文

一直对撰写英文论文抱有恐惧之心,所以一直不敢动手去写。 宁愿写出中文,然后再翻译成英文,也不愿意直接用英文书写。 后来,在导师的鼓励写,一段一段的按照自己的想法写出来了。虽然写的不通顺,语法和逻辑都有...
  • guolinlin11
  • guolinlin11
  • 2016年09月06日 19:49
  • 513

第一篇博客 hexo学习笔记

为什么用hexo以前都是直接在csdn上写博客,一直也是断断续续的。 后来自己买了个阿里云一直想搞个自己的博客,但懒的弄前端.就一直没搞== 现在看大神们博客都是这种样式,才知道用的都是hexo生...
  • whx750702272
  • whx750702272
  • 2016年03月06日 18:50
  • 648

严蔚敏--快速排序

快速排序的基本思想:通过一趟快速排序,将待排序记录分成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,已达到整个序列有序。 要点1:枢轴的选择 通常...
  • sxh850297968
  • sxh850297968
  • 2015年03月10日 11:19
  • 1571

我的第一篇博客之安装和配置zookeeper的点点滴滴

感谢我自己的迷之双手!我的zookeeper运行成功了!五步杀第一步当然是解压啦 小白必备语句tar -zxvf *.tar -C 目录地址第二步删除没用的编译文件rm -rf src/ *.xml ...
  • g5539220y
  • g5539220y
  • 2017年05月14日 22:34
  • 111

排序-快速排序-优化-基准值选择待排序数组的三个等距取样的中位数

package xwq.sort;import xwq.util.In; import xwq.util.StdOut;/** * 使用三取样partition优化QuickSort */ pub...
  • qing0706
  • qing0706
  • 2016年01月22日 09:12
  • 521

第一篇 第一篇博客打个招呼

打招呼
  • heisehuanyin
  • heisehuanyin
  • 2017年03月14日 12:41
  • 99

快速排序、基准元的选取及其优化

1 快速排序的基本思想 快速排序(Quicksort)是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年03月08日 17:07
  • 2890

第一篇博客,激活博客。。。

如题
  • wwhbuaa
  • wwhbuaa
  • 2010年06月18日 00:39
  • 63

第一篇博客,,

  第一篇博客.
  • ruanrenfeng
  • ruanrenfeng
  • 2010年07月29日 12:43
  • 132
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第一篇博客——快速排序
举报原因:
原因补充:

(最多只允许输入30个字)