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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

【快速排序】


【基本原理】

选取基准

产生左右标识

左右比基准

满足则换位

排完一次

基准定位

左右递归

直到有序

图解

原数组

 

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

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#——多态:抽象类和抽象方法

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

MrTang_Unity的博客 588

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

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

qq_44965626的博客 180

C#入门个人学习笔记

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

Sentra233的博客 1236

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

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

qq_44965626的博客 591

c#四部曲(基础)

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

ultraman1234566的博客 1706

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

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

weixin_52398264的博客 272

唐老狮 UGUI 实战学习笔记

仅作学习笔记

咩咩的博客 838

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

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

qq_44965626的博客 579

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

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

weixin_52398264的博客 202

唐老狮C#——位运算符

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

MrTang_Unity的博客 372

Unity3D程序基础框架(上)

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

#的博客 7420

Unity AssetBundle,AB包(学习笔记)

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

qq_37856544的博客 1611

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

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

MrTang_Unity的博客 571

唐老狮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的博客 3849

数据结构:排序算法详解

本文系统梳理了排序算法的核心概念与分类,涵盖排序的定义、重要性及评价维度(时间/空间复杂度、稳定性)。重点解析了O(n²)基础算法(冒泡、选择、插入、希尔)与O(nlogn)高级算法(归并、快速、堆排序),并介绍O(n)非比较排序(计数、桶、基数排序)及其适用场景。通过对比表总结各算法性能特点,强调稳定性原则与实际应用优化策略,为算法选型提供全面参考。

Edbse的博客 20

排序(数据结构)

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

给个免费的关注呗 186

【数据结构】八种常见的排序算法

思路: 创建左右指针。⾸先从右向左找出⽐基准⼩的数据,找到后⽴即放⼊左边坑中,当前位置变为新的"坑",然后从左向右找出⽐基准⼤的数据,找到后⽴即放⼊右边坑中,当前位置变为新的"坑",结 束循环后将最开始存储的分界值放⼊当前的"坑"中,返回当前"坑"下标(即分界值下标)稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的 相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,⽽在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值