快速排序-python实现

本文用 python 实现快速排序。

思路

- 假如有一个序列 [4, 6, 1, 14, 8],首先要把第一个数找到它正确的位置,即它左边都小于它,右边均大于它。

1、取出第一个值 赋值给临时变量 target,target = 4 ,取出变量left 记录左边下标,变量 right 记录右边下标。

1

2、把 target 与 right 下标的值进行比较,如果 target 小, 则 right += 1,再重复 2 的操作。反之将 right 下标的值赋值给 left 的值,sort_list[left] = sort_list[right],然后left += 1 ,执行3。

2

3、把 target 与 right 下标的值进行比较,如果 target 小, 则 right += 1,再重复 3 的操作。反之将 right 下标的值赋值给 left 的值,sort_list[left] = sort_list[right]

3

4、直到 left == right,把 target 赋值给 sort_list[left] ,这时左边的数小于 target ,右边的数大于 target。

4
- 然后把 target 左边的序列和右边的序列递归执行上述操作,直到最后,排序完成

代码

如下:

def quick_sort(sort_list, start, end):
    if start >= end:
        return
     
    # 记录两端下标
    left = start
    right = end
    # 取第一个作为目标
    target = sort_list[left]
 
    while left < right:
         
        while left < right and target <= sort_list[right]:
            right -= 1
        sort_list[left] = sort_list[right]
 
        while left < right and sort_list[left] < target:
            left += 1
        sort_list[right] = sort_list[left]
 
    sort_list[left] = target
    # 把target两边的序列递归执行
    quick_sort(sort_list, start, left-1)
    quick_sort(sort_list, left+1, end)
 
 
if __name__ == '__main__':
    sort_list = [4, 6, 1, 14, 8]
    quick_sort(sort_list, 0, len(sort_list) - 1)
    print(sort_list)

快速排序是不稳定的,平均时间复杂度是 O(nlog2n),最差时间复杂度 O(n2)。
----END----

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 烧脑体操(一) - Optional 的嵌套 Swift 烧脑体操(二) - 函数的参数 Swift ...
    Zakerberg阅读 3,101评论 0 0
  • 注意!!!! 如果你是技术大牛、技术大咖,请略过这篇文章避免耽搁您的时间,这篇文章属于入门级别。😀 1、原型模式的...
    dragonYao阅读 1,124评论 0 0
  • 我问佛:我为什么穷?佛:你没有学会给予。我:我一无所有如何给予?佛:一个人即使一无所有也可以给予别人七种东西——颜...
    维新医堂阅读 2,905评论 0 0
  • 儿子今年上一年级,开学到现在快一个月了,心里各种焦虑和担心。从幼儿园开始就慢慢培养他的一些习惯,在儿子两岁的时候看...
    夏夏家庭教育阅读 1,696评论 1 1
  • 今天语文课学习了《语文园地三》,复习23个声母,24个韵母和16个整体认读音节。 家庭作业: 1.《语文配套练习册...
    贺玮阅读 1,566评论 0 0