数据结构与算法学习记录:快速排序
快速排序的基本思想:
分治法,即,分解,求解,组合 .
分解:
在无序区R[low..high]中任选一个记录作为基准(通常选第一个记录,并记为Pivot,其下标为pivotpos),以此为基准划分成两个较小的子区间R[low,pivotpos - 1]和R[pivotpos + 1 , high],并使左边子区间的所有记录均小于等于基准记录,右边子区间的所有记录均大于等于基准记录,基准记录无需参加后续的排序。而划分的关键是要求出基准记录所在的位置pivotpos.
求解:
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序
组合:
当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。
具体过程:
设序列为R[low,high],从其中选第一个为基准,设为pivot,然后设两个指针i和j,分别指向序列R[low,high]的起始和结束位置上:
1),将i逐渐增大,直到找到大于pivot的关键字为止;
2),将j逐渐减少,直到找到小于等于pivot的关键字为止;
3),如果i<j,即R[i,j]的元素数大于1,则交换R[i]和R[j];
4),将基准记录pivot放到合适的位置上,即i和j同时指向的位置,则此位置为新的pivotpos。
备注:
快速排序是不稳定排序,即相同的关键字排序后,相对位置是不确定的。
示例代码:
快速排序代码C#
分治法,即,分解,求解,组合 .
分解:
在无序区R[low..high]中任选一个记录作为基准(通常选第一个记录,并记为Pivot,其下标为pivotpos),以此为基准划分成两个较小的子区间R[low,pivotpos - 1]和R[pivotpos + 1 , high],并使左边子区间的所有记录均小于等于基准记录,右边子区间的所有记录均大于等于基准记录,基准记录无需参加后续的排序。而划分的关键是要求出基准记录所在的位置pivotpos.
求解:
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序
组合:
当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。
具体过程:
设序列为R[low,high],从其中选第一个为基准,设为pivot,然后设两个指针i和j,分别指向序列R[low,high]的起始和结束位置上:
1),将i逐渐增大,直到找到大于pivot的关键字为止;
2),将j逐渐减少,直到找到小于等于pivot的关键字为止;
3),如果i<j,即R[i,j]的元素数大于1,则交换R[i]和R[j];
4),将基准记录pivot放到合适的位置上,即i和j同时指向的位置,则此位置为新的pivotpos。
备注:
快速排序是不稳定排序,即相同的关键字排序后,相对位置是不确定的。
示例代码:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?