数据结构算法--3快速排序

快速排序比冒泡排序,选择排序,插入排序速度都快

快速排序思路:

^取一个元素P,(第一个元素),使元素P归位。

^列表被P分成了两部分,左边都比P小,右边都比P大。

^递归完成排序。

过程:

把5拿出来存到tmp,5的位置是指针left,right指针在8,8>5,right指针-1,9又>5,right再次-1

right来到2,2<5,所以left指针处(5),成为2,此时right指针成为空元素(原来2的位置),所以left指针+1,left到了元素7,由于7>5,所以7要去列表右侧,所以right指针处(原来2的位置),变为7,依次类推,两指针交替变换

完成第一轮归位后,左侧和右侧再次分别进行归位,递归完成排序

python 复制代码
def quick_sort(li,left,right):  # 一开始传进来left=0
    if left<right:
        mid=partition(li,left,right)  # 返回下标值,从列表第一个值开始,每次定位在中间值
        quick_sort(li,left,mid-1)
        quick_sort(li,mid+1,right)
python 复制代码
def partition(li,left,right):
    tmp=li[left]            # 把第一个值存起来
    while left<right:
        while left<right and li[right]>tmp:
            right-=1   # 往左走一步
        li[left]=li[right]   # 右边的值写到左边空位上
        while left<right and li[left]<=tmp:
            left+=1
        li[right]=li[left]  # 把左边的值写到右边空位
    li[left]=tmp            # 把tmp归位
    return left             # 返回mid值,left,right都行

如果是一个原本就逆序的数列要排成顺序数列,每一轮都只确定了基准元素的位置

这时最坏情况,时间复杂度退化成了O(n方)

我们可以避免这种最坏情况的发生,随机选择一个元素作为基准元素(不是第一个)

这样快速排序时间复杂度可以看出是O(nlogn)

相关推荐
fantasy_arch39 分钟前
pytorch例子计算两张图相似度
人工智能·pytorch·python
No0d1es2 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
WBluuue2 小时前
数学建模:智能优化算法
python·机器学习·数学建模·爬山算法·启发式算法·聚类·模拟退火算法
赴3353 小时前
矿物分类案列 (一)六种方法对数据的填充
人工智能·python·机器学习·分类·数据挖掘·sklearn·矿物分类
大模型真好玩3 小时前
一文深度解析OpenAI近期发布系列大模型:意欲一统大模型江湖?
人工智能·python·mcp
RPA+AI十二工作室3 小时前
亚马逊店铺绩效巡检_影刀RPA源码解读
chrome·python·rpa·影刀
大阳1234 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
小艳加油4 小时前
Python机器学习与深度学习;Transformer模型/注意力机制/目标检测/语义分割/图神经网络/强化学习/生成式模型/自监督学习/物理信息神经网络等
python·深度学习·机器学习·transformer
Swift社区4 小时前
Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
leetcode·swift·twitter
weixin_307779135 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法