python算法与数据结构010--快速排序

本文详细介绍了快速排序算法的工作原理及其实现过程。快速排序是一种高效的排序方法,采用分治策略将数据分割并递归排序,其最优时间复杂度为O(nlogn),但在最坏情况下可能退化至O(n²)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序:又称划分交换排序,在数列中找到一个基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,依次类推,完成所有数据的排序。

最优的时间复杂度:O(nlogn)

最坏的时间复杂度:O(n²)

是不稳定排序

"""
    快速排序:在数列中找到一个基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一
    部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,依次类推,完成所有数据的排序。
"""

def quickSort(start,end,dataList):
    """
    :param start: 序列中排序的开始位置
    :param end: 序列中排序的结束位置
    :param dataList: 默认将序列按照升序排序
    :return:
    """

    #递归出口。当start=end说明子序列只有一个元素,已经放在了正确的位置上,无需排序。
    if start>=end:
        return

    # 默认取序列第一个元素为基准
    flag = dataList[start]
    #序列中由左向右移动的游标
    low=start
    #序列中由右向左移动的游标
    high = end

    #按照升序排列,所以将比flag大的元素移动到右边,比flag小的元素移动到左边。
    #一定要考虑和flag相等的元素,否则会出现死循环。
    while low<high:
        #先从右开始往左找,如果值比flag大,继续往左,end-1。
        #碰到比flag小的元素,则将该数据移动到data[low]的位置上去
        while low<high:
            if dataList[high] > flag:
                high-=1
            else:
                #相等的时候,也会将数据移动到flag的左边,所以快速排序也不是稳定排序。
                dataList[low]=dataList[high]
                low+=1
                #跳出内层循环之后,将开始从左往右找
                break

        #从左开始往右找
        while low<high:
            if dataList[low]<=flag:
                low+=1
            else:
                dataList[high] = dataList[low]
                high-=1
                break
    #跳出上面的while循环,说明此时low=flag,可以确定flag在序列中的下标。
    dataList[low]=flag

    quickSort(start,low-1,dataList)
    quickSort(low+1,end,dataList)

dataList = [12,32,1,43,54,23,32,12,99,2]
quickSort(0,9,dataList)
print(dataList)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值