六.排序nb三人组(快速排序)

news2024/9/25 9:38:11

目录

17-快速排序原理介绍

思路:

18-快速排序代码实现

19-快速排序代码实现2

缺点:

递归的限度:


17-快速排序原理介绍

思路:

--先找一个变量把 5(第一个数) 存起来,

(两个箭头分别是left , right)

--左边有一个空位, 发现左边的位置是给比5小的值准备的.

--找比5小的值放到左边, 从右边开始找. 8 9 2放左边,右边出现空位,

--从左边找比5大的数, 7放右边

-->左边出现空位,从右边箭头找, 1 比5小,放左边

-->右边出现空位, 从左边箭头找, 4 6比5大,放右边

-->左边出现空位, 3比5小,放左边

-->最后箭头重合, 结束.


18-快速排序代码实现

​
def partition(li,left,right):
    tmp = li[left]      #取第一个元素tmp, 分成两部分(左边比tmp小,右边比tmp大).
    while left < right:
        while left < right and li[right] >= tmp:    #从右找比tmp小的数,
            right -=1   #right一直往左走.
        li[left] = li[right]    #循环完,交换对应的位置(找到的).
        # print(li,'right')
        while left < right and li[left] <= tmp:     #从左找比tmp大的数:
            left +=1    #left向右走一步.
        li[right] = li[left]    #循环完,交换对应的位置(找到的).
    li[left] = tmp   #tmp最后归位,剩下的一个就是.
    # print(li,'left')
    return left     #返回中间那个归位的元素.
​
def quickSort(li,left,right):
    if left < right:
        mid = partition(li,left,right)  #中间值,分成两部分,分别再排序.
        quickSort(li,left,mid-1)
        quickSort(li,mid+1,right)
​
li = [5,7,4,6,3,1,2,9,8]
print(li)
quickSort(li,0,len(li)-1)
# partition(li,0,len(li)-1)
print(li)

19-快速排序代码实现2

(这里涉及到递归,不用通式判断)

函数里面有递归时,外面不要加装饰器,(否则会打印很多次)
import random
import copy
import time
from test_time import *
def partition(li,left,right):
    tmp = li[left]      #取第一个元素tmp, 分成两部分(左边比tmp小,右边比tmp大).
    while left < right:
        while left < right and li[right] >= tmp:    #从右找比tmp小的数,
            right -=1   #right一直往左走.
        li[left] = li[right]    #循环完,交换对应的位置(找到的).
        # print(li,'right')
        while left < right and li[left] <= tmp:     #从左找比tmp大的数:
            left +=1    #left向右走一步.
        li[right] = li[left]    #循环完,交换对应的位置(找到的).
    li[left] = tmp   #tmp最后归位,剩下的一个就是.
    # print(li,'left')
    return left     #返回中间那个归位的元素.
def _quickSort(li,left,right):
    if left < right:
        mid = partition(li,left,right)  #中间值,分成两部分,分别再排序.
        _quickSort(li,left,mid-1)
        _quickSort(li,mid+1,right)
​
@timeit
def quickSort(li):
    _quickSort(li,0,len(li)-1)
​
li = list(range(10000))
random.shuffle(li)
li1=copy.deepcopy(li)
quickSort(li1)
​
#这里可以和其他排序比一下,快速排序速率很快.

缺点:

987654321

--9为第一个值

数据传倒序的

递归的限度:
import sys
sys.setrecursionlimit(10000)
#改完之后速率变慢了

改一下:随机找一个数与第一个交换.

--但还是有最坏情况.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法体系-12 第 十二 二叉树的基本算法 下

一 实现二叉树的按层遍历 1.1 描述 1&#xff09;其实就是宽度优先遍历&#xff0c;用队列 2&#xff09;可以通过设置flag变量的方式&#xff0c;来发现某一层的结束&#xff08;看题目&#xff09;看下边的第四题解答 1.2 代码 public class Code01_LevelTraversalBT {publ…

【LabVIEW FPGA入门】FPGA不同传递数据方法比较

数据共享方法的选择应基于应用的需要。根据应用程序的重要特性&#xff0c;所讨论的任何一种方法都可能是合适的。 传输方法FPGA资源损耗&#xff1f;不同时钟源之间传递数据&#xff1f;新数据通知&#xff1f;常见用途变量逻辑片是是否提取最新数据存储器存储器是否否提取最新…

ubuntu20.04_PX4_1.13

说在前面&#xff1a;&#xff08;最好找一个干净的Ubuntu系统&#xff09;如果配置环境的过程中出现很多编译的错误或者依赖冲突&#xff0c;还是建议新建一个虚拟机&#xff0c;或者重装Ubuntu系统&#xff0c;这样会避免很多麻烦&#x1f490; &#xff0c; 安装PX4 1.13.2 …

学习刷题-12

3.22 hw机试【双指针】 Leetcode674 最长连续递增序列 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 双指针 一个慢指针一个快指针 慢指针记录递增子序列起点&#xff0c;快指针去寻找还在当前递增子序列的最后一…

Nutanix 国产化替代|一文了解 SmartX 超融合替代可行性与迁移方案

2022 年 8 月 19 日&#xff0c;Nutanix&#xff08;路坦力&#xff09;宣布中国市场自 2023 财年起将转型为合作伙伴销售主导模式&#xff0c;引起了广泛关注&#xff1b;同时结合当前 IT 基础架构的国产化趋势背景&#xff0c;不少正在使用和考虑使用 Nutanix 产品的企业开始…

基于Nvidia的ChatGPT实现智能回答(附完整代码)

目录 首先&#xff0c;我们需要在英伟达官网上找到相关的API-key 第二步&#xff0c;编写代码&#xff0c;调用API即可实现代码复用。 Python完整代码&#xff1a; Node版代码&#xff1a; Shell脚本代码&#xff1a; 最后我们在相应的编译器执行代码即可&#xff0c;在这里我们…

重学SpringBoot3-MyBatis的三种分页方式

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-MyBatis的三种分页方式 准备工作环境搭建数据准备未分页效果 1. 使用MyBatis自带的RowBounds进行分页演示 2. 使用物理分页插件演示 3. 手动编写分页SQL…

软件测试-概念

衡量软件测试结果的依据--需求 需求的概念 满足用户期望或正式规定文档(合同, 规范, 标准)所具备的条件或权能, 包含用户需求和软件需求. IEEE:定义: 软件需求是(1)用户解决问题或达到目标所需的条件或权能. (2)系统或系统部件要满足合同, 标准, 规范或其它正式规定文档所具备…

MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳。设置自增主键id,oracle创建自增id序列和触发器

1. MySQL 支持设置自增id的字段类型&#xff1a;int、bigint、double等数值类型&#xff0c;一般用int、bigint支持设置自动更新时间的字段类型&#xff1a;datetime、timestamp下面sql中的now()函数可以用current_timestamp()替代 1.1. 不指定秒精度 drop table if exists …

一文读懂IP地址

IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。IP地址的主要特点是具有唯一性&#xff…

【神经网络】得分函数,损失函数~

目录 引言 一、神经网络概述 1 定义 2 基本原理 二、得分函数 1 定义 2 应用方法 3 与神经网络 三、损失函数 1 定义 2实现方法 3 与神经网络 四、得分函数与损失函数的协同作用 1 关系 2 实际应用 六、代码事例 &#xfffc;、总结与展望 引言 在人工智能与机…

【GO全栈掌握入门】

GO语言全栈学习咯 ~ 1. GO 语言简介2.语言特性3.哪些公司使用GO语言&#xff1f;3. 安装GO开发环境4. 学习说明&#xff1a;5. GO结构篇5.1 工作空间5.2 导入包5.3 组织结构5.4 依赖管理 6. GO骨肉篇7.GO工具篇 1. GO 语言简介 起源于2007年&#xff0c;GO语言之年轻如你所见&…

CodeSys创建自定义的html5控件

文章目录 背景创建html5control.xml文件控件界面以及逻辑的实现使用的资源安装自定义的html5控件库 背景 查看官方的资料&#xff1a;https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_html5_dev.html 官方的例子&#xff1a;https://forge.codesys.com/…

AI火灾监测报警摄像机

AI火灾监测报警摄像机&#xff0c;作为一种结合人工智能技术和摄像监控技术的创新产品&#xff0c;在火灾防控领域发挥着越来越重要的作用。这种摄像机通过先进的AI算法&#xff0c;能够实时监测摄像头画面&#xff0c;识别出火灾的特征&#xff0c;如火光、浓烟等。一旦检测到…

2 Spring之IOC详解

文章目录 4&#xff0c;IOC相关内容4.1 bean基础配置4.1.1 bean基础配置(id与class)4.1.2 bean的name属性步骤1&#xff1a;配置别名步骤2:根据名称容器中获取bean对象步骤3:运行程序 4.1.3 bean作用范围scope配置4.1.3.1 验证IOC容器中对象是否为单例验证思路具体实现 4.1.3.2…

从零开始学习在VUE3中使用canvas(五):globalCompositeOperation(图形混合)

一、简介 通过设置混合模式来改变图像重叠区域的显示方式。 const ctx canvas.getContext("2d");ctx.globalCompositeOperation "source-over"; 二、属性介绍 source-over 这是默认的复合操作。将源图像绘制到目标图像上&#xff0c;保留目标图像的不透…

优化选址问题 | 模拟退火算法求解物流选址问题含Matlab源码

目录 问题代码问题 模拟退火算法(Simulated Annealing, SA)是一种概率性的全局优化算法,用于求解大规模组合优化问题。在物流选址问题中,模拟退火算法可以用来寻找成本最低、效率最高的仓库或配送中心位置。下面是一个简化的模拟退火算法求解物流选址问题的描述,并附带有…

Leetcode - 周赛389

目录 一&#xff0c;3083. 字符串及其反转中是否存在同一子字符串 二&#xff0c;3084. 统计以给定字符开头和结尾的子字符串总数 三&#xff0c;3085. 成为 K 特殊字符串需要删除的最少字符数 四&#xff0c;3086. 拾起 K 个 1 需要的最少行动次数 一&#xff0c;3083. 字符…

HTML5和CSS3笔记

一&#xff1a;网页结构(html)&#xff1a; 1.1&#xff1a;页面结构&#xff1a; 1.2&#xff1a;标签类型&#xff1a; 1.2.1&#xff1a;块标签&#xff1a; 1.2.2&#xff1a;行内标签&#xff1a; 1.2.3&#xff1a;行内块标签&#xff1a; 1.2.4&#xff1a;块标签与行…

钡铼R40工业4G路由器保障智能物流仓储系统高效运行

随着物流行业的不断发展和智能化技术的广泛应用&#xff0c;智能物流仓储系统已成为提升物流效率、降低成本、提高服务质量的重要手段。在这样的背景下&#xff0c;钡铼R40工业4G路由器作为一种先进的网络通信设备&#xff0c;在智能物流仓储系统中扮演着关键的角色&#xff0c…