快速排序(python)

系统 1345 0

2.快速排序

2.1 算法思想

快速排序是对冒泡排序的一种改进。通过一次排序( 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一次快速排序 )将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序的时间复杂度为o(nlogn),空间复杂度为o(nlogn)

2.2 算法过程

  1. 从数列中挑出一个元素,称为 “基准”(pivot),通常选取数组的第一个数;
  2. 遍历数组,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边,因此这不是稳定的排序算法)。分区完成之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  3. 递归把小于基准值元素的子数列和大于基准值元素的子数列排序,具体过程合步骤1、2一样。

2.3 python实现

            
              
                def
              
              
                quickSort
              
              
                (
              
              numList
              
                )
              
              
                :
              
              
    n 
              
                =
              
              
                len
              
              
                (
              
              numList
              
                )
              
              
                if
              
               n 
              
                ==
              
              
                0
              
              
                or
              
               n 
              
                ==
              
              
                1
              
              
                :
              
              
                return
              
               numList
    pivot 
              
                =
              
               numList
              
                [
              
              
                0
              
              
                ]
              
              
    left 
              
                =
              
              
                [
              
              
                ]
              
              
    right 
              
                =
              
              
                [
              
              
                ]
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
              n
              
                )
              
              
                :
              
              
                # 分区
              
              
                if
              
               numList
              
                [
              
              i
              
                ]
              
              
                <
              
               pivot
              
                :
              
              
            left
              
                .
              
              append
              
                (
              
              numList
              
                [
              
              i
              
                ]
              
              
                )
              
              
                else
              
              
                :
              
              
            right
              
                .
              
              append
              
                (
              
              numList
              
                [
              
              i
              
                ]
              
              
                )
              
              
                return
              
               quickSort
              
                (
              
              left
              
                )
              
              
                +
              
              
                [
              
              pivot
              
                ]
              
              
                +
              
               quickSort
              
                (
              
              right
              
                )
              
              
                # 对左右两个子数组粉笔进行快排,并连同基准值一块返回
              
              
numlist 
              
                =
              
              
                [
              
              
                3
              
              
                ,
              
              
                2
              
              
                ,
              
              
                5
              
              
                ,
              
              
                6
              
              
                ,
              
              
                7
              
              
                ,
              
              
                4
              
              
                ,
              
              
                1
              
              
                ,
              
              
                8
              
              
                ]
              
              
                print
              
              
                (
              
              quickSort
              
                (
              
              numlist
              
                )
              
              
                )
              
              
                # 输出结果为:[1,2,3,4,5,6,7,8]
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论