码迷,mamicode.com
首页 > 编程语言 > 详细

Python算法之快速排序

时间:2017-05-18 20:14:35      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:log   http   结束   排序   这一   复杂   append   分而治之   特殊情况   

  算法思想:快速排序运用了分而治之的思想,即在所选数组中选择一个基准(任选一个都可以),以改基准为基础,将小于该基准的元素都移动基准的左边,大于该基准的数据都移动到右边,然后对左右两边进行递归处理。同样也是按照上述方法,即:选基准,在递归。                                                          

  算法实例:Arr=[10,5,2,3,4,7,6] --->  [2, 3, 4, 5, 6, 7, 10]

  代码如下:

          技术分享

          上述代码有几处可以简化为如下 :

         greater,less = [],[]

           for i in arr[1:]:                          精简版               less = [i for i in arr[1:] if i <= pivot]

          if i <= pivot:               ==========>>>>> greater = [i for i in arr[1:] if i > pivot]

            less.append(i)        

          else:

            greater.append(i)

  算法性能分析:

    最坏情况下,时间复杂度为O(n^2)

    平均情况下,时间复杂度为O(nlogn)

 

在快速排序中有两个关键点:

  第一,递归出口的判断

     对于递归出口,我们可以来考虑几种特殊情况:

     当数组中没有元素时,这时应该直接返回就行;当数组中只有一个元素的时候,也应该和直接返回。因此,当数组中元素为空或者仅有一个元素的时候,程序就应该返回。

  第二,递归表达式的确定

     对于快速排序,从其算法思想来考虑,应该是这样的。

        [小于基准]   +    [基准]     +     [大于基准]

     我们清楚了这一点之后,然后分别对小于基准部分和大于基准部分都来调用快速排序。这样我们就可以得到快排递归表达式。

     quicksort(less_part)  + [基准]  +  quicksort(great_part)

    技术分享

     快速排序的中间过程,其实就是一棵递归树。当递归到达叶子节点,这时递归也就结束了,程序就执行完毕了。

 

Python算法之快速排序

标签:log   http   结束   排序   这一   复杂   append   分而治之   特殊情况   

原文地址:http://www.cnblogs.com/vipchenwei/p/6874924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!