【唐老狮】排序——快速排序

【唐老狮】C#——多态:抽象类和抽象方法 上篇回顾 概念 同一类型对象 执行相同行为 有不同的表现 多态的实现 ↓↓↓↓ 编译时多态 函数重载 运行时多态 虚函数(vob) 抽象函数(之后讲) 接口(之后讲) vob virtual(虚函数) override(重写) v和o结合使用 实现多态 base(父类) 保留父类行为 ​​上一篇我们已经学习了多态的基本概念,和利用vob来实现多态。今天我们将学习多态的另一种实现——抽象类和抽象函数。 【抽象类和抽象函数】 ... 阅读详情

【快速排序】


【基本原理】

选取基准

产生左右标识

左右比基准

满足则换位

排完一次

基准定位

左右递归

直到有序

图解

原数组

 

一般选取第一个元素作为基准

5为基准值

认为5现在的位置为空

用右侧元素3和5进行比较

3小于5放左边(左空位)

把3放到5的位置

left++

 

3的位置可以认为空出来了

用左侧元素6和5进行比较

6大于5放右边(右空位)

把6放到刚才3的位置

right--

 

6的位置可以认为空出来了

用右侧元素9和5进行比较

9大于5放右边

不动

right继续--

 

用右侧元素2和5进行比较

2小于5放左侧(左空位)

把2放到刚才6的位置

left++

 

left和right相等

基准值定位

放到该位置

 

到此一轮排序结束

接着以同样的流程对

数组两侧继续排序

直到坐标是大于等于右标识

停止

 

 

最终结果

 

上动图

 


【关键逻辑】

声明快速排序函数名

有递归

用函数

 

递归函数结束条件

 

基准值

左右游标

 

核心交换逻辑

 

左右递归继续排序

 


【标准实现】

 


【逻辑分析】

通过上面的图解和逻辑注释,快速排序的原理显而易见了,不太需要再做过多的分析讲解。

-快速排序,归并排序,两者很像-

相同点:

  1. 他们都会用到递归

  2. 把数组分成几部分

不同点:

  1. 归并排序是递归分拆分数组后再进行排序,递归走到头再排序;快速排序是边排边拆分,排了一轮排下一轮,走到头就排序结束了。

  2. 归并排序在递归中会不停产生新的数组用于合并;快速排序一直是在改变原数组,不会产生新数组。

-如何降序排列-

 

右游标不停左移:目前的逻辑是如果右边的数大于基准值,游标左移,意思是小的才会停下来往左边放

左游标不停右移:目前的逻辑是如果左边的数小于基准值,游标右移,意思是大的才会停下来往右边放

降序排列

改比较规则即可

 


【练习】

快速排序的写法也不是固定的,基于它的原理有很多种写法。如果你理解了它的基本原理,可以进行练习,尝试用2到3种方法实现快速排序。


【总结】
 

-基本原理-

选取基准

产生左右标识

左右比基准

满足则换位

升序时

小的放左边

大的放右边

降序时反之

排完一次

基准定位

基准左右递归

直到有序

-套路写法-

基准值变量

左右游标记录

3层while循环

游标不停左右移动

重合则结束

结束定基准

递归排左右

错位则结束

-注意事项-

左右互放

while循环外定基准


关注唐老狮获取更多干货内容

 

唐老狮Unity入门笔记 【代码】唐老狮Unity入门笔记。 阅读详情

相关推荐

【唐老狮】C#——位运算符

​​上一篇文章我们学习了&&和||,我们今天将要学习的位运算符中的位与和位或和逻辑与和逻辑或长得非常像。 ​​我们要知道目前学习的条件运算符和逻辑运算符他们基本都是配合使用的,而今天学习的位运算符相对比较独立!废话不多说,我们直接开始吧。 强记忆一句话 ↓↓↓↓ 位运算 是将数值转换为 二进制进行计算 【位运算符】 位与(&) ↓↓↓↓ 有0则0 位或(|) ↓↓↓↓ 有1则1 ...

MrTang_Unity的博客 374

C#入门个人学习笔记

本人按照哔哩哔哩up主唐老狮进行学习,所使用的ide为Visual Studio 2022。

Sentra233的博客 1243

【唐老狮】C#四部曲之C#基础:习题汇总

本篇文章对视频教程 《【唐老狮】Unity系列之C#四部曲—C#基础》 当中的课后练习题进行了汇总,方便同学们统一进行练习和复习 这些习题的解题部分都在本教程中以视频的形式进行了详细讲解 B站免费试看: 【唐老狮】Unity系列之C#四部曲—C#基础_哔哩哔哩_bilibili 泰课会员免费看: https://www.taikr.com/goods/show/593 本套课程属于Unity实战就业路线(打折预售中) https://www.taikr.com/goods/sho.

MrTang_Unity的博客 3875

20250621-《唐老狮Unity入门》笔记(二十二):碰撞检测

20250621-《唐老狮Unity入门》笔记(二十二):碰撞检测

qq_44965626的博客 607

Unity3D程序基础框架(上)

前言: 最近在B站看到了唐老师出的课程——学习Unity3D基础框架,我觉得对我会很有用,特写此文章做以记录。 这篇需要你了解一些C#的知识。 单例模式基类模块 我们创建一个新项目,创建标准的目录结构 在Base下面新建脚本——BaseManager.cs 单例模式基类模块的作用主要是——减少单例模式重复代码的书写 我们都知道单例模式是怎么一种设计模式,那么什么是单例模式基类模块呢?其实就是单例模式的基础模板。 代码奉上 public class ...

#的博客 7484

【唐老狮】C#——复杂数据(数组)

数组是某种变量类型数据的集合 ​之前学习的变量 ​​如图所示,我们之前学习的变量类型,声明都是单个声明的,比如声明一个int就好像在内存空间中开辟了一个能装4个字节的房间。而今天我们要学习的数组就是一个可以存储多个同一变量类型的数据集合体。 【数组】 申明数组变量 注意 一般情况下申明数组时 必须初始化容量 数组的长度 获取数组中的元素 注意 数组的第一个元素索引为0 数组的最后一个元素...

MrTang_Unity的博客 572

20250623-《唐老狮Unity基础》笔记(二):三角函数

20250623-《唐老狮Unity基础》笔记(二):三角函数

qq_44965626的博客 185

Android蓝牙Mesh组网实战:从零搭建智能灯光控制系统(附完整代码)

本文详细介绍了基于Android平台开发蓝牙Mesh智能灯光控制系统的完整实战流程。从环境搭建、核心概念解析,到设备扫描配网、网络初始化、模型配置与消息通信,提供了完整的代码实现和调试技巧。重点讲解了如何使用开源Mesh库实现设备发现、分组控制、场景管理等核心功能,并分享了实际项目中遇到的典型问题与解决方案。

weixin_29174013的博客 654

c#四部曲(基础)

核心进阶请养成用三目运算符(三元表达式)的习惯。在开始之前先考考你,判断两个数中的最大值,并返回它。最简单的写法1:2。

ultraman1234566的博客 1716

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 172

骚操作,尝试使用Xilinx XVC协议,通过Jlink来下载调试Xilink zynq FPGA芯片

最近一直在玩zynq芯片,手头使用的Xilinx Platform USB Cable 下载线真是辣鸡,速度慢如蜗牛,每次下载bit文件或者烧写flash文件都要大半天,实在是难以忍受。逻辑分析仪看了下xilinx的下载线,速度只有6.25M,并且数据间隔非常大,不懂这线的开发者咋想的,这总线利用率真是低到爆了 上图为xilinx DLC 10下载线波形,惨不忍睹! 为了不浪费生命在下载等待时间上,我打算找找看有没有别的仿真调试选择。经过一番查找后发现Xilinx的仿真器好像选择不是很多,要么贵死要

听我瞎扯淡的博客 1万+

-唐老狮-C#入门运算符笔记

条件、逻辑、位、三目运算符

weixin_52398264的博客 273

用OpenIPC复活你的旧摄像头:手把手教你给君正T31芯片设备刷开源固件

本文详细介绍了如何使用OpenIPC项目为君正T31芯片的旧摄像头刷入开源固件,解锁更多功能并延长设备寿命。从硬件识别、风险控制到详细刷机步骤和后期配置,手把手教你将闲置摄像头改造为智能监控设备,实现隐私可控、功能扩展等优势。

weixin_30790841的博客 765

唐老狮 UGUI 实战学习笔记

仅作学习笔记

咩咩的博客 845

PCL 将对象模板与点云对齐【2025最新版】

PCL模版匹配算法的使用案例,博客长期更新,本文最近更新时间为:2025年1月18日。

点云侠的博客 5378

18-XLINX的XC7A100T的BANK0引脚说明

DXP_0和 DXN_0是纯输入引脚,Xilinx Artix-7 FPGA 内部集成的一个片上监控模数转换器​ 的差分模拟输入对,模数转换器​的模拟信号输入端,将外部的模拟电压​ 采样并转换为内部的数字值,是一个单向的信号采集过程。它是与 VCCADC配对的关键引脚,共同为内部的精密模数转换器提供一个纯净、安静、独立的参考地平面。多FPGA同步配置: 在多FPGA系统中,主FPGA配置完成后,可以拉低从FPGA的 INIT_B使其等待,等所有FPGA都准备好后,再同时释放,实现同步启动。

weixin_44479192的博客 232

-唐老狮-C#基础 数组笔记

同一变量类型的数据集合,所有的变量类型都可以申明为数组返回数值等于(数组的索引/下标从0开始,等差递增数列,差值为1):array[<index>]:array[<index>] = 要赋予的值;通过for语句遍历数组,的值:因为数组被创建时就锁定了内存空间大小,所以要:用for+if语句。

weixin_52398264的博客 203

Python爬虫实战:使用最新技术爬取路透社新闻数据

网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据和人工智能技术的发展,爬虫技术在数据采集、市场分析、舆情监控等领域发挥着越来越重要的作用。requests:同步HTTP请求库aiohttp:异步HTTP请求库:HTML解析库lxml:高效的HTML/XML解析库selenium:浏览器自动化工具playwright:现代浏览器自动化工具pandas:数据处理和分析库scrapy:专业的爬虫框架:生成随机User-Agentredis:缓存和分布式爬虫支持。

2201_76125261的博客 1204

20250621-《唐老狮Unity入门》笔记(十九):摄像机Camera

20250621-《唐老狮Unity入门》笔记(十九):摄像机Camera

qq_44965626的博客 584

uniapp APP端:蓝牙报错writeBLECharacteristicValue:fail property not support(uni.writeBLECharacteristicVal)

uni-app 蓝牙fail property not support、发现不了服务特征值的问题、突然发现微信蓝牙小秘密,使用uni-app编译成安卓APP后报错writeBLECharacteristicValue:fail property not support,发现不了服务特征值,uniApp APP调用蓝牙API发送指令过快导致,uniapp 蓝牙 writeBLECharacteristicValue property_not_support iOS Android BLE GATT 特征值写入

✅ 精选推荐文章 2943

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Unity AssetBundle,AB包(学习笔记)

文章目录前言AB包的概念及作用生成AB包 前言 为了实习,紧急学习一下AB包的相关知识。魂类项目在做了。 学习视频链接: 【唐老狮】Unity热更新之AssetBundle,文章中的部分图片来自该视频教程。 AB包的概念及作用 做游戏需要用到资源,AB包就是Unity针对不同平台(安卓,IOS,PC)的统一资源压缩包。AB包能存储除了C#脚本之外的几乎所有Unity资产(模型,贴图,预制体,材质,音效)。 AB包相对于Resources文件夹这一套资源管理方案,拥有更好的资源管理及资源读取办法,能够压缩资源

qq_37856544的博客 1615

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据结构:时间复杂度和空间复杂度

若存在正常数 c 和 n₀,使得当 n ≥ n₀ 时,

2502_92937908的博客 498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 329

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 557
上一篇: 【唐老狮】排序——插入排序
下一篇: 【唐老狮】C#——变量类型
一唐老狮一
博客等级 码龄5年 507粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值