前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python快速排序

python快速排序

作者头像
AsiaYe
发布2020-08-10 15:23:57
3380
发布2020-08-10 15:23:57
举报
文章被收录于专栏:DBA随笔DBA随笔
//

python小程序

//

晚上没事儿干,用python写了个快排小程序,分享出来看看:

快速排序:

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf8 -*-
from random import randrange, shuffle


'''
基本思想:
通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。

基本流程:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。

稳定性:不稳定

复杂度:在最坏情况下是O(N^2),平均的时间复杂度是O(N*lgN)
'''

# 自动生成list
def generate_array():
    array = []
    while len(array) < 12:
        array.append(randrange(0, 101, 3))
    print("before sort array is {}".format(array))
    shuffle(array)
    return array


def quick_sort(array, head, tail):
    # 如果head > tail 则直接返回
    if head >= tail:
        return array
    # 否则进行排序
    else:
        start, end = head, tail
        base = array[start]  # 设置基准数为左侧数字
        while start < end:
            # 从右边开始判断,如果列表右边的数比基准数大或者相等
            while start < end and array[end] >= base:
                end = end-1   # 不进行操作,将end向前移动一位
            # 如果找到不满足条件的数字,则把end的数字复制给start
            array[start] = array[end]

            # 同样的方法比较前半区
            while start < end and array[start] <= base:
                start = start+1
            array[end] = array[start]
        # 这轮比较做完之后,列表被分成了两个半区,此时start=end
        array[start] = base  # 或者array[end]=base也可以
        print("middle result is {0},base is {1}".format(array, base))
        quick_sort(array, head, start-1)
        quick_sort(array, start+1, tail)
    return array


arr = generate_array()
result = quick_sort(arr, 0, len(arr)-1)
print("after sort is {}".format(result))

输出结果如下,其中base是每一次交换使用的基准数字:

代码语言:javascript
复制
before sort array is [96, 6, 63, 63, 51, 75, 63, 12, 0, 39, 33, 0]
middle result is [12, 6, 63, 39, 33, 0, 63, 0, 51, 63, 96, 75],base is 63
middle result is [0, 6, 0, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 12
middle result is [0, 6, 0, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 0
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 6
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 33
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 39
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 96, 75],base is 63
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 96, 75],base is 51
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 75, 96],base is 96
after sort is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 75, 96]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档