冒泡排序与选择排序完整对比解析
一、两种排序底层逻辑差异1. 冒泡排序课件抱西瓜案例生活比喻每层电梯口放西瓜每次只抱一个上楼途中遇到更大西瓜就交换一趟走完最大西瓜会落到最末尾。默认排序从小到大升序核心逻辑从头到尾相邻两个元素两两对比顺序颠倒就交换每一轮把无序区里最大元素移到无序区末尾无序区间规则第t趟待排序范围 [0, n-1-t]左边界固定下标 0每一轮尾部收缩一格操作特点边比较边交换单趟会产生多次交换最多执行n-1趟即可完成整体排序2. 选择排序课件学生排队案例生活比喻一群学生按身高从矮到高排队每次找出当前人群里最矮的学生直接和队伍首位交换。•默认排序从小到大升序•核心逻辑完整遍历无序区找到最小值下标遍历结束后统一交换每一轮把无序区里最小元素移到无序区开头•无序区间规则第t趟待排序范围 [t, n-1]右边界固定数组最后一位每一轮头部收缩一格• 操作特点查找下标过程不交换元素每一趟最多只执行 1 次交换共需要n-1趟选择操作3. 两种排序循环结构差异根源冒泡每轮把最大值放到无序区末尾选择每轮把最小值放到无序区开头二者有序区生长位置、无序区间范围完全相反原生循环代码不能直接互换套用。仅理论上可以修改循环边界、遍历方向实现对方的放置效果但学习、考试不建议仿写改造版本。二、标准代码完整对照C 语言1标准冒泡排序升序最大值移至无序区末尾// 外层循环控制总排序趟数最多n-1趟 for(t 0 ; t n-1;t) { // 第t趟无序区间[0, n-1-t) for(i 0 ; i n-1-t;i) { // 相邻元素比较前数大于后数则交换 if(a[i] a[i1]) { // 交换a[i]与a[i1] int temp a[i]; a[i] a[i1]; a[i1] temp; } } }说明内层循环i最大取到n-2若取n-1i1会超出数组下标发生越界t0无序区覆盖全部数组0~n-1t1无序区0~n-2每轮尾部减少一位单趟循环结束当前无序区最大值固定到尾部有序区。2标准选择排序升序最小值移至无序区开头// 外层循环共n-1趟选择 for(t 0 ; t n-1 ; t) { // 先假设无序区第一个元素a[t]为最小值 int min t; // 遍历剩余无序区 [t1, n-1] for(i t 1 ; i n;i) { if(a[i] a[min]) { min i; // 更新最小值的下标 } } // 最小值不在无序区首位时仅交换一次 if(min ! t) { // 交换a[t] 和 最小值a[min] int temp a[t]; a[t] a[min]; a[min] temp; } }说明第t趟待排序无序区下标范围固定为[t, n-1]内层循环只查找最小值下标遍历全程不会交换任何元素内层循环走完后最多执行一次交换最小值固定到有序区末尾。三、维度对比表格对比维度标准冒泡排序标准选择排序每轮核心操作将无序区最大值移到无序区末尾将无序区最小值移到无序区开头有序区生成位置数组尾部数组头部第 t 趟无序区间[0, n-1-t][t, n-1]内层循环行为相邻两两比较逆序立刻交换遍历查找最值下标遍历中途不交换交换特征一趟循环可发生多次交换每趟循环最多仅 1 次交换原生循环能否直接互换不能区间范围逻辑冲突不能区间范围逻辑冲突拓展知识点升序改降序实现方式两种排序仅修改比较判断符号循环层数、区间、总趟数完全不变不会增加循环步数仅交换次数随原始数组有序度变化冒泡降序if(a[i] a[i1]) → if(a[i] a[i1])选择降序定义max t判断改为if(a[i] a[max])核心疑惑解答你之前全部疑问汇总疑惑 1能不能互换两者原生循环思路写代码理论上可以修改循环边界、遍历方向实现对方效果但不建议仿写改造版本。原因教材、考试只认标准原生代码改造后可读性差无性能提升仅用来理解原理即可。疑惑 2改成从大到小排序会多出循环步数吗不会。循环总趟数、内外层循环执行次数完全不变只有交换次数会变化循环步数不受升降序影响。疑惑 3为什么课件、教材全部用从小到大举例升序符合日常数字、生活排序习惯理解门槛更低统一基准方便横向对比两种排序的结构差异降序只是微小变形只需改动一处判断无需重头完整推演。疑惑 4所有排序算法都默认升序举例吗绝大多数基础排序、高级排序教学均以升序为主案例降序仅作为课后拓展习题不作为主线讲解内容。

相关新闻

7个理由告诉你为什么OpenBoard是安卓用户必备的隐私保护键盘

7个理由告诉你为什么OpenBoard是安卓用户必备的隐私保护键盘

7个理由告诉你为什么OpenBoard是安卓用户必备的隐私保护键盘 【免费下载链接】openboard 项目地址: https://gitcode.com/gh_mirrors/op/openboard 在数字时代,您的每一次按键都可能被监控和收集。OpenBoard作为一款100%开源键盘应用,为您提供了…

2026/7/22 18:23:06 阅读更多 →
Java基础语法2

Java基础语法2

Java基础语法输入循环运算符输入 输入: Scanner : 扫描器 扫描输入的内容 1: 在class结构的前面 导入这个扫描器 import java.util.Scanner; 2: 在程序入口中创建一个扫描器 : Scanner sc new Scanner(System.in); 3…

2026/7/23 21:00:41 阅读更多 →
6 三数之和

6 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1&…

2026/7/24 5:55:29 阅读更多 →

最新新闻

BQ25155电源管理芯片:可穿戴设备的高集成度电源解决方案

BQ25155电源管理芯片:可穿戴设备的高集成度电源解决方案

1. 项目概述与核心价值在可穿戴设备、智能手表、TWS耳机乃至便携式医疗设备的设计中,电源管理模块往往是决定产品成败的关键。它不仅要负责为电池安全、高效地充电,还要在有限的板载空间内,为系统提供稳定、干净的电源轨,同时还要…

2026/7/24 12:16:14 阅读更多 →
虚拟零售AI架构优化与大模型落地实践

虚拟零售AI架构优化与大模型落地实践

1. 虚拟零售AI架构的现状与挑战 当前虚拟零售行业正处于从数字化向智能化转型的关键阶段。根据我过去三年参与多个头部零售企业AI项目的实践经验,现有系统普遍面临三大痛点: 首先是响应速度瓶颈。传统推荐系统平均响应时间在500ms以上,高峰期…

2026/7/24 12:16:14 阅读更多 →
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统

【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统

大家好,我是你们的老朋友腻害兔,今天继续我们的 RuoYi-Vue-Pro 源码拆解系列。上一期我们聊了 ERP 模块,有读者留言说想看商城模块的拆解——这不,它来了!今天我们要啃的是整个项目里最庞大、最复杂的模块:…

2026/7/24 12:16:14 阅读更多 →
DDR2/DDR3 PCB设计实战:信号完整性、电源规划与布局布线全解析

DDR2/DDR3 PCB设计实战:信号完整性、电源规划与布局布线全解析

1. 项目概述与核心挑战在嵌入式系统、高性能计算平台乃至消费电子领域,DDR2/DDR3内存接口的设计一直是硬件工程师的“必修课”,也是项目成败的关键分水岭。我经历过不止一个项目,原理图逻辑完美,软件驱动正常,但板子一…

2026/7/24 12:16:14 阅读更多 →
OpenClaw:跨平台智能对话整合方案与免密钥调用技术

OpenClaw:跨平台智能对话整合方案与免密钥调用技术

1. 项目概述:OpenClaw 的多平台智能对话整合方案OpenClaw 是一款突破性的跨平台对话代理工具,它实现了在无需复杂 API 密钥配置的情况下,将最新一代 AI 语言模型无缝接入主流即时通讯平台。作为一名长期从事智能对话系统开发的工程师&#xf…

2026/7/24 12:16:13 阅读更多 →
PCM9211数字音频接收器:环路滤波器设计与时钟恢复原理详解

PCM9211数字音频接收器:环路滤波器设计与时钟恢复原理详解

1. 项目概述与核心挑战在数字音频的世界里,时钟就是一切。无论是从CD机、机顶盒还是游戏主机通过光纤或同轴电缆传来的S/PDIF信号,其本质都是一个嵌入了音频数据和时钟信息的双相编码流。接收端芯片,比如我们这次要深入探讨的德州仪器&#x…

2026/7/24 12:15:13 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻