Python3实现快速排序 通俗易懂

Python3实现快速排序

快速排序 是一种交换排序,属于分治算法

思路:
对于要排序的元素集合,指定集合的第一个元素为基准点,通过一系列的扫描和交换(见下面的代码),让基准点左边的元素比基准点小,让基准点右边的元素比基准点大,这样分成了以基准点为界的左右两个子集合,对于每个子集合递归地重复上述步骤,直到每个最小集合只有一个元素时,就说明每个最小子问题解决完成,从而总问题解决完成。

代码:

# 快速排序 arr要排序的元素总集,left要排序的最左索引,right要排序的最右索引
def kp(arr, left, right):old_left = leftold_right = rightif left >= right:returnbase = arr[left] # 指定left为基准点,存储基准值toLeft = True # 扫描方向while left < right: # 只要left < right,就一直扫描;扫描的结束条件是left和right重合if toLeft: # 从右向左扫描:若找到比base小的,则把值赋给left处,然后left+1,扫描方向变为向右;否则继续向左扫描(right - 1)if arr[right] < base:arr[left] = arr[right]toLeft = False # 反转扫描方向left += 1else:right -= 1else: # 从左向右扫描:若找到比base大的,则把值赋给right,然后right-1,扫描方向变为向左;否则继续向右扫描(left + 1)if arr[left] > base:arr[right] = arr[left]toLeft = True # 反转扫描方向right -= 1else:left += 1arr[left] = base # 把记录的基准值赋值在left和right重合处# 继续对左右2个子问题进行递归求解,看,这就是分治算法思想(子问题相互独立不重合)kp(arr, old_left, left - 1)kp(arr, left + 1, old_right)if __name__ == '__main__':arr = [5, 6, 3, 1, 7, 8, 19, 4, 88, -2]kp(arr, 0, len(arr) - 1)print(arr)

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

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

相关文章

C++队列queue用法详解(超详细)

点击蓝字关注我们一、定义queue是一种容器转换器模板&#xff0c;调用#include< queue>即可使用队列类。二、queue初始化queue<Type, Container> (<数据类型&#xff0c;容器类型>&#xff09;初始化时必须要有数据类型&#xff0c;容器可省略&#xff0c;省…

redis nosql_Redis教程:NoSQL键值存储

redis nosql课程大纲 Redis是使用ANSI C编写的&#xff0c;具有可选持久性的开源&#xff0c;网络化&#xff0c;内存中键值数据存储。根据DB-Engines.com的月度排名&#xff0c;Redis是最受欢迎的键值存储。 其名称意为“远程词典服务器”。 Redis是BSD许可的&#xff0c;并且…

python随机抽取人名_python实现艾宾浩斯背单词功能,实现自动提取单词、邮件发送,再也不用担心背单词啦...

&#xfeff;已经完成了利用python爬虫实现定时QQ邮箱推送英文文章&#xff0c;辅助学习英语的项目&#xff0c;索性就一口气利用python多做一些自动化辅助英语学习的项目&#xff0c;对自己的编程能力和英文水评也有一定的帮助&#xff0c;于是在两天的努力下&#xff0c;我完…

用不到125行C语言代码就可以编写一个简单的16位虚拟机?

点击蓝字关注我们一位国外的软件工程师分享了这么一篇博文&#xff1a;Writing a simple 16 bit VM in less than 125 lines of C&#xff08;用不到 125 行 C 语言编写一个简单的 16 位虚拟机&#xff09;。博文地址&#xff1a;https://www.andreinc.net/2021/12/01/writing-…

用一个程序生成另一个程序_还有另一个报告生成器?

用一个程序生成另一个程序如果您具有业务应用程序开发的经验&#xff0c;那么很可能会遇到要求该应用程序具有灵活的报告机制的需求。 我工作的公司主要专注于开发业务解决方案&#xff0c;而报告是必不可少的&#xff0c;实际上&#xff0c;它必须包含我们开发的所有企业系统的…

CocosCreator1.x实现水流动的效果

CocosCreator1.x实现水流动的效果Cocos Creator版本&#xff1a;1.10.2 运行结果&#xff1a;(H5和原生都支持) 场景: 脚本&#xff1a; HelloWorld.js&#xff1a; let shader require(shader);cc.Class({extends: cc.Component,properties: {water: cc.Node,waterNorm…

python爬虫xpath教程_使用 Xpath 进行爬虫开发

使用 Xpath 进行爬虫开发 Xpath( XML Path Language, XML路径语言)&#xff0c;是一种在 XML 数据中查找信息的语言&#xff0c;现在&#xff0c;我们也可以使用它在 HTML 中查找需要的信息。 既然谈到 Xpath 是一门语言&#xff0c;当然它就会有自己的一些特定的语法。我们这里…

java使用泛型后消除泛型_如何以及何时使用泛型

java使用泛型后消除泛型本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的旅程&#xff01; 在这里查看 &a…

用C语言写烟花,给心中的那个人看!

点击蓝字关注我们前言程序员不懂浪漫? 大错特错&#xff01;今天就让你们看看什么是程序员的浪漫&#xff01;你向窗外看烟花&#xff0c;我在窗边看你&#xff0c;这时&#xff0c;你比烟花好看的多&#xff0c;你的眼眸倒映满天的烟火&#xff0c;我的瞳孔倒映你温柔的脸庞…

js实现阶乘算法的三种方法

js实现阶乘算法的三种方法// 非递归写法 function f(n) {if (0 n) {return 1;}let res 1;for (let i 1; i < n; i) {res * i;}return res; }// 递归写法 function g(n) {if (0 n) {return 1;}return n*g(n-1); }// 动态规划写法 let dp []; function h(n) {if (n < …

手把手教你做一个线程池--C语言版

点击蓝字关注我们1、线程池原理我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a;如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低…

oracle 48小时内_缺血性脑梗死后48小时内使用阿替普酶能够降低脑损伤程度

一项刊登在影响因子7.6杂志Neurology上题为“Effect of IV alteplase on the ischemic brain lesion at 24–48 hours after ischemic stroke”的研究报告中&#xff0c;来自爱丁堡大学的科学家们发现&#xff0c;alteplase与病变可视性的短期进展降低相关。在荟萃分析中&#…

基于按位与的 就散策略_比较散列策略

基于按位与的 就散策略总览 编年史有很多用于哈希的实现&#xff0c;包括City和Murmur。 它也有自己的香草哈希&#xff0c;但是如何测试呢&#xff1f; 什么是香草哈希&#xff1f; Vanilla Hash设计得尽可能简单&#xff0c;并且针对Orthogonal Bits测试进行了优化&#xff…

js实现数组降维算法[不准用Array.prototype.flat的api]

js实现数组降维算法[不准用Array.prototype.flat的api]// target要降维的元素&#xff0c;n降维阶数&#xff0c;newArr存储结果的新数组 function f(target, n 1, newArr []) {if (n < 0) {newArr.push(target);return;}if (!Array.isArray(target)) {newArr.push(target…

python编程能力等级测试_青少年编程能力等级测评-Python编程二级试卷

青少年编程能力等级测评 Python 编程二级试卷 一、单项选择题&#xff08;共 20 题&#xff0c;每题分&#xff0c;共 50 分&#xff09; 1. 运行下方代码段&#xff0c;输出的结果是&#xff08; &#xff09; 。 a() print(type(a)) A &#xff0e;&#xff1b; B &#xff0…

MySQL夺命16问,你能坚持到第几问?

点击蓝字关注我们1、数据库三大范式是什么&#xff1f;第一范式&#xff1a;每个列都不可以再拆分。第二范式&#xff1a;在第一范式的基础上&#xff0c;非主键列完全依赖于主键&#xff0c;而不能是依赖于主键的一部分。第三范式&#xff1a;在第二范式的基础上&#xff0c;非…

美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)

美图手机投射功能在哪将实例转换为设计不良的类型。 尽管如此&#xff0c;在某些情况下没有其他选择。 从第一天开始&#xff0c;执行此功能就已成为Java的一部分。 我认为Java 8提出了对这种古老技术稍加改进的需求。 静态铸造 Java中最常见的转换方法如下&#xff1a; 静态…

js箭头函数和普通函数区别

js箭头函数和普通函数区别实验环境&#xff1a;nodejs v12.16.1 箭头函数不能作为构造函数&#xff0c;而普通函数可以 箭头函数没有原型&#xff0c;而普通函数有 箭头函数return可以省略语句块。(如果>右边不是语句块&#xff0c;则代表return右边的表达式或对象) 箭…

git 更新_[技术分享T.191212]GitLab使用方法及git命令常见问题(不断更新)

该文章用于记录一些GitLab的使用指南&#xff0c;以及在实际版本控制过程中遇到的问题及解决方法&#xff0c;会尽量及时的更新~GitLab简介&#xff1a;GitLab和GitHub很相似都属于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来…

记一次开发实战-对提供接口的C/C++进行二次开发

点击蓝字关注我们一、需求描述我有一个USB5538的库和头文件&#xff0c;并通过头文件提供了接口&#xff0c;我想把它更改一下&#xff0c;编译成python可调用的模块。二、创建工程及其目录1、创建空项目2、创建目录三、创建文件1、复制文件并添加2、添加新文件并写入四、环境配…