news 2026/8/27 20:31:04

【Unity小白学习日记2】数据结构必考知识点 | 冒泡、选择、插入排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Unity小白学习日记2】数据结构必考知识点 | 冒泡、选择、插入排序

1、冒泡排序

核心思路描述

重复遍历数组,相邻两个元素两两比较,前大于后就交换。每一轮会把未排序区间最大元素 “冒泡” 到末尾。增加交换标记优化,如果一轮没有发生交换,说明数组已经有序,可以直接结束。

关键 C# 代码

// 冒泡排序 从小到大 public void BubbleSort(int[] arr) { if(arr == null || arr.Length <= 1) return; int n = arr.Length; for(int i = 0; i < n - 1; i++) { bool swapFlag = false; // 交换标记,优化 // 后面i个元素已经排好,不用比较 for(int j = 0; j < n - 1 - i; j++) { if(arr[j] > arr[j+1]) { // 交换 int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; swapFlag = true; } } if(!swapFlag) break; // 没有交换,直接退出 } }

总结:

冒泡排序,就是循环遍历数组,相邻元素两两对比,如果前面的数字比后面大就交换。每一轮遍历,会把未排序部分最大的元素移动到数组末尾。最多执行 n‑1 轮。我加了一个交换标记做优化,如果某一轮一次交换都没有发生,代表数组已经全部有序,可以直接跳出循环。最坏时间复杂度 O (n²),是原地、稳定排序。

2、选择排序

核心思路描述

将数组分成已排序区间、未排序区间。每一轮在未排序区间找到最小值的下标,把最小值和未排序区间第一个位置做交换,不断扩大已排序区间。

关键代码片段

public void SelectSort(int[] arr) { int n = arr.Length; for(int i = 0; i < n - 1; i++) { int minIndex = i; // 记录最小值下标 // 在未排序区找最小下标 for(int j = i + 1; j < n; j++) { if(arr[j] < arr[minIndex]) minIndex = j; } // 和未排序第一个位置交换 int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } }

总结:

选择排序把数组划分成已排序和未排序两部分。每一轮在未排序区间找到最小值的索引,和未排序的第一个元素交换位置。循环完成排序。时间复杂度固定 O (n²),原地排序,属于不稳定排序。

3、插入排序

核心思路描述

类似整理扑克牌。数组前面部分作为已经有序的序列,依次取出后面未排序的元素,向前和有序部分对比,把更大的元素向后挪,将当前元素插入到合适位置。数组接近有序时效率很高

关键代码片段

public void InsertSort(int[] arr) { int n = arr.Length; for(int i = 1; i < n; i++) { int cur = arr[i]; // 当前待插入元素 int j = i - 1; // 向前遍历有序区间,大于cur的全部后移 while(j >= 0 && arr[j] > cur) { arr[j+1] = arr[j]; j--; } arr[j+1] = cur; // 插入到空位 } }

总结:

插入排序就像整理手牌。把数组前面当作已经有序,依次拿后面每一个元素,向前比较,把比它大的元素往后挪,找到空位插入。当原数组本身比较有序的时候,它的效率会很好。最坏时间复杂度 O (n²),原地、稳定排序。

三者对比速记

排序时间最坏是否稳定特点
冒泡O(n2)稳定相邻交换,可优化提前退出
选择O(n2)不稳定找最小下标交换,交换次数少
插入O(n2)稳定接近有序数组表现最好

小何同学:路漫漫其修远兮,吾将上下而求索!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 20:29:08

高并发服务的权限边界如何划分

高并发服务的权限边界如何划分权限边界从资产、调用方和失败后果出发设计&#xff1b;接口方便性不能取代最小权限原则。 Go 的 context.Context 用来传递取消、截止时间和请求范围内的值。它不会自动携带 Authorization Header&#xff0c;但项目代码可能把用户 Claims 或其他…

作者头像 李华
网站建设 2026/8/27 20:28:45

从设备接入到OTA升级:一套可落地的IoT产品组合服务实践

1. 项目背景与核心价值 做IoT产品这行最怕什么&#xff1f;不是硬件不稳定&#xff0c;不是云端架构不够先进&#xff0c;而是你辛辛苦苦做出来的一套东西&#xff0c;客户用不起来&#xff0c;或者用着用着就出各种幺蛾子。我这次梳理的项目&#xff0c;核心是一套完整的IoT产…

作者头像 李华
网站建设 2026/8/27 20:25:49

GigE Vision 详解 · 05:Bootstrap 寄存器与标准特性(§36~37)

GigE Vision 详解 05:Bootstrap 寄存器与标准特性(36~37) 覆盖 GigE Vision 3.0 第 36~37 章:Bootstrap 寄存器映射、相机标准特性列表。 前面反复出现的 0x0010、0x0024、SCPS0、RSCCTL0……这一篇给你一张完整的地图,并讲清「主机怎么用 READREG 读它们」。 一、Bootst…

作者头像 李华
网站建设 2026/8/27 20:25:31

单片机毕业设计-基于 STM32 单片机的饮水智能监测与定时提醒系统开发 基于 STM32 的物联网智能水杯加热控制与移动端 APP 设计(011805)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华