八大排序之——交换排序
1.冒泡排序1.1冒泡排序概念与总思路通过重复遍历待排序数组每次都将相邻两个元素进行比较每轮都会把一个最大的元素放到末尾就像气泡缓缓上浮一样因此得名冒泡排序1.2 代码思路通过两层for循环的嵌套加上参数设计以及判断是否发生交换的标记变量组合而成参数为数组名以及数组长度一第一层for循环标记变量第一层for循环用于遍历整个数组并定义标记变量falgfor (i 0; i n; i) { int flag 0 }二二层for循环比较相邻变量本轮是否发生交换判断第二层for循环用于相邻变量的比较如果需要发生交换就将标记变量置为 1并在第二层for循环外设置一个判断条件如果一轮下来flag仍为0证明没有发生交换for (int i 0; i n; i) { int falg 0 for (int j 0; j n-i-1 ; j) { if (a[j] a[j 1]) { swap(a[j], a[j 1]); falg 1 } } if (flag 0) { break; } }完整代码如下void Bubble(int* a, int n) { for (int i 0; i n; i) { int falg 0 for (int j 0; j n-i-1 ; j) { if (a[j] a[j 1]) { swap(a[j], a[j 1]); falg 1 } } if (flag 0) { break; } } }2.快速排序2.1 快速排序概念与总思路快速排序是Hoare在1962年提出的一种二叉树结构的交换排序方法将一个数组看成是树状结构不停的划分左右两个部分具体思路就是通过划定一个范围在此范围中找出一个关键值keyi将关键值放到数组的中间使数组左边的数据都比关键值要小数组右边的数据都比关键值要大然后将范围缩小进行同样的操作原本的范围是整个数组通过递归操作将keyi值往左与往右的数组设定为新的范围在新的范围内找出自己范围内的关键值通过不断的将范围缩小并在新范围内进行调整缩小到范围只剩两个数据的时候进行最后一次调整然后结束。2.2 代码思路以及两种找关键值(keyi)的方法思路是利用递归方法以及查找关键值此两种找keyi的方法都用到了一个共同的递归函数我们将其命名为QuickSort需要传递的参数有数组名int* a数组的头尾int left int right思路分为3步一设置递归终止条件我们不妨将left 与 right 看作指向数组某个位置的箭头当左箭头与右箭头相遇时递归就应该终止所以当left right 时递归一定结束为了让限制的范围更大我们加上左箭头超过右箭头的限制if(left right) { retutn; }二定义keyi并调用查找函数定义keyi 来接收返回值int keyi _QuickSort_Hoare(a, left, right);//Hoare //int keyi _QuickSort_Lomuto(A, Left, right);//Lomuto //二者只有命名区别三递归左右序列通过对原函数的两次调用完成该任务QuickSort(a, left, keyi - 1); QuickSort(a, keyi 1, right);完整的主函数代码就是//1 if(left right) { retutn; } //2 int keyi _QucikSort(a, left, right);//调用对应查找函数 //3 QuickSort(a, left, keyi - 1); QuickSort(a, keyi 1, right);2.2.1 hoare 法找keyihoare法找keyi方法分为6步总体思路为定义keyi通过left找大于keyi的数right找小于keyi的数再将left处的数与right的数进行交换循环往复以达到左边小右边大的目的一定义与标记keyi在最左侧初始将keyi放道left的位置int kyei left;二隔壁开找因为初始了keyi在最左侧找的时候不用与自己比较节省一次循环次数left;三3while循环查找第一个循环用于限定范围left right防止越界第二和第三个循环用于查找找最大与最小其中在第二和第三个while循环中也要加入第一个while循环的限制条件以免循环内的调整导致了越界访问while (left right) { while(left right a[left] a[keyi]) { left; } while (left right a[right] a[keyi]) { right--; } }四条件l r 交换此次交换也在第一个while 循环的范围内因此也需要加上第一个while循环的限制条件防止数组越界访问while (left right) { while(left right a[left] a[keyi]) { left; } while (left right a[right] a[keyi]) { right--; } if (left right) { Swap(a[left], a[right--]); } }五keyi r 交换keyi值移中因为right 找的是最小值所以最后将keyi 处的值与right处进行交换就可以保证右侧都是大于keyi处的值左侧都是小于keyi处的值Swap(a[keyi], a[right]);六返回right返回中间值return right;完整的Hoare方法找keyi 的代码为int Q1(int* a, int left, int right) { int keyi left; left; while (left right) { while(left right a[left] a[keyi]) { left; } while (left right a[right] a[keyi]) { right--; } if (left right) { Swap(a[left], a[right--]); } } Swap(a[keyi], a[right]); return right; }2.2.2 lomuto 前后指针法找keyilomuto法的思路是通过设置一个前后指针前者负责探路从左往右查找比基准值要小的进行交换就使得小的数都排在了基准值的左边一定义keyi 以及前后指针prev 与 cur将keyi 与 prev 初始定义在最左侧cur定义为prev 后面一个位置int keyi left; int prev left, cur prev 1;二while循环条件cur不越界保证探路指针cur 不越界while (cur right) { }三cur prev 条件交换先来看代码while (cur right) { if (a[cur] a[keyi] prev ! cur) { Swap(a[cur], a[prev]); } cur; }先进行cur处值与基准值的比较如果找到比基准值小的就进行逻辑和后面的处理保证prev处的值不与cur处的值相等且进行一个前置加加与不等于cur处值得判断保证prev与cur的指向不会重合。cur保证一直向后探路四keyi prev 交换 keyi 移中将基准值放在中间Swap(a[keyi], a[prev]);五返回prevreturn prev;完整代码void Q2(int* a, int left, int right) { int keyi left; int prev left, cur prev 1; while (cur right) { if (a[cur] a[keyi] prev ! cur) { Swap(a[cur], a[prev]); } cur; } Swap(a[keyi], a[prev]); return prev; }

相关新闻

在最新版 Eclipse 中配置 AIcoder 接入 GPUSTACK 与 OLLAMA 本地模型:TaoToken 统一 Key 通道实践

在最新版 Eclipse 中配置 AIcoder 接入 GPUSTACK 与 OLLAMA 本地模型:TaoToken 统一 Key 通道实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 19:44:40 阅读更多 →
STM32嵌入式C++补课:构建链、SPI排错与CAN恢复实战

STM32嵌入式C++补课:构建链、SPI排错与CAN恢复实战

写系列文章比写单篇麻烦的地方在于,前面的坑不填,后面就没人信了。这个《基于STM32的嵌入式C编程之旅》写到第六篇,我的私信和评论区忽然涌进来一批特别具体的问题:VSCode里到底怎么编译烧录、为什么一编译就是一堆看不懂的报错&a…

2026/10/5 19:44:38 阅读更多 →
大模型预标注实战:零部署接入Label Studio ML Backend,标注效率提升3倍

大模型预标注实战:零部署接入Label Studio ML Backend,标注效率提升3倍

标注数据是 AI 项目里最能熬人的环节。我之前做一个实体识别项目,三千条样本标了两周,全程盯着屏幕拖鼠标,眼睛快瞎掉不说,中间还因为标准不统一返工了两轮。后来尝试让大模型在 Label Studio 里做预标注,配合 CubeStu…

2026/10/5 19:44:38 阅读更多 →

最新新闻

微信小程序界面设计:WXSS 选择器课程之 ::selection 伪元素实战

微信小程序界面设计:WXSS 选择器课程之 ::selection 伪元素实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 22:08:14 阅读更多 →
MRAM工业嵌入式存储方案:MR25H40CDF与PIC18LF47K42驱动实战

MRAM工业嵌入式存储方案:MR25H40CDF与PIC18LF47K42驱动实战

1. 为什么 MRAM 在工业嵌入式场景里越来越香搞过工业设备数据采集的朋友应该都有过这种体验:设备跑在现场,环境温度动辄七八十度,偶尔还要断电重启,结果回头一看,关键参数丢了,或者存储芯片的某个扇区写坏了…

2026/10/5 22:07:13 阅读更多 →
工业数据记录新方案:MRAM替换并行SRAM与PIC18F47Q10实战

工业数据记录新方案:MRAM替换并行SRAM与PIC18F47Q10实战

1. 为什么工业现场还在用并行SRAM,而MRAM已经悄悄替换了它做工业控制和嵌入式数据采集的人,大概率都遇到过这个场景:设备跑在现场,每隔几毫秒要记录一次关键状态,比如电机转速、阀门开度、累计运行时长。这些数据不能丢…

2026/10/5 22:07:13 阅读更多 →
MRAM与PIC18LF47K42工业数据存储方案:SPI驱动与掉电保护实战

MRAM与PIC18LF47K42工业数据存储方案:SPI驱动与掉电保护实战

1. 项目缘起与方案选型:为什么是 MRAM 加 PIC181.1 一个真实的数据存储痛点做过工业数据采集的朋友大概率都遇到过这个场景:设备装在配电柜里或者户外机箱内,主控每隔几秒就要把一组关键参数(累计流量、校准系数、故障快照、运行小…

2026/10/5 22:07:12 阅读更多 →
ChatGPT Codex试用心得:从dotnet项目PR看码农的可靠助手还是失业号角?TaoToken统一Key实测

ChatGPT Codex试用心得:从dotnet项目PR看码农的可靠助手还是失业号角?TaoToken统一Key实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 22:06:11 阅读更多 →
EditText 光标不闪动?从 android:textCursorDrawable 到 TaoToken 的排查路径

EditText 光标不闪动?从 android:textCursorDrawable 到 TaoToken 的排查路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 22:06:11 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →