第一篇博客——快速排序

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


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


 




相关文章推荐

我的第一篇CSDN

这是我写的第一篇文章,正经写代码还没多久,先从基础开始。以后会把所学到的技术问题不论大小分享出来 今天来讨论java中数据自动转化的问题。 在程序中,自动转化随时可能发生,发生时往往是在我...

我的第一篇CSDN博客

一直没有书写习惯的我,为什么要开始写博客呢? 听知乎上的大神说,想成为一名优秀的程序员,就必须要学会写博客,记录每天的学习心得,以及自己所认为重要的知识点,方便以后查阅,然后就是与博友相互交流,分享...

黑马程序员技术博客之快速排序

以下是我编写的快速排序 /***个人对快速排序的粗浅理解:* 简单排序实际上就是讲数组不断从中间分成两部分,先保证前半部分比后半部分要小,而后再将其中的子数组(前半部分或后半部分)分成两个部分,并保证...

冒泡排序-插入排序-快速排序-选择排序---飞天博客

请看文章: 排序经典集合:插入排序,冒泡排序,快速排序,选择排序,代码简单请看下面的基本介绍和代码 插入排序:直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到一排好序的有序表中   ...

快速排序——quicksort

  • 2016年04月08日 10:52
  • 167KB
  • 下载

算法与数据结构——快速排序

  • 2007年07月09日 20:18
  • 90KB
  • 下载

算法之排序-----排序第一篇 快速排序

快速排序 算法介绍   排序是所有算法里比较基本的算法了,并且非常简单。那么我为什么还要自己再写一遍呢?我觉得知识是大家的,只有你掌握了,这个知识才属于你,才能为你所用。所以接下来,我要连续...

我的第一篇博客——工作三年后的反思

最近两个月以来,公司形势不容乐观,之前的裁员,现在伙伴们的离职,公司还拖欠工资,自己不得不去准备面试了。这两年的工作都是主管带我过来的,我已经是两年多没面试过,现在让我去面试,心里都没谱。于是,我就搜...

我的第一篇博客——初识Java

希望能和各位前辈大牛一起交流交流 JavaSE——初识Java  1.什么是Java   Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概...

第一篇ACM切题博客——最短路专题(HDU1)

做这些题花了过长的时间,提高效率是目前需要解决的重要问题。做一个勤学好问的孩子吧。 目录:【HDU】 1548    A strange lift ★ 2544    最短路  ★ 3790 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第一篇博客——快速排序
举报原因:
原因补充:

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