news 2026/4/16 23:43:28

排序算法入门:冒泡、选择、插入排序详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
排序算法入门:冒泡、选择、插入排序详解

一、先解答上次的 思考题

图:顶点 0 1 2 3,边:0-1、0-2、1-2、2-3从 0 开始 BFS 典型顺序:0 1 2 3


二、今天学习目标

  1. 了解排序算法的分类与指标
  2. 掌握冒泡排序
  3. 掌握选择排序
  4. 掌握插入排序
  5. 完整可运行代码 + 复杂度总结

三、排序基础概念

  • 稳定排序:相等元素前后顺序不变
  • 时间复杂度:执行快慢
  • 空间复杂度:占用额外内存多少

今天这三个都是:

  • 简单直观
  • 时间复杂度O(n²)
  • 适合小规模数据

四、1. 冒泡排序(Bubble Sort)

思想:两两比较,大的往后 “冒”,每轮冒出一个最大值。

// 冒泡排序 void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }

五、2. 选择排序(Selection Sort)

思想:每轮选最小的,放到已排序区间末尾

// 选择排序 void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int minIdx = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[minIdx]) minIdx = j; } // 交换 int temp = arr[i]; arr[i] = arr[minIdx]; arr[minIdx] = temp; } }

六、3. 插入排序(Insertion Sort)

思想:像摸牌一样,把当前数插入前面已经排好的序列里

// 插入排序 void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } }

七、完整测试代码

#include <stdio.h> // 三种排序函数放这里 …… // 打印数组 void printArr(int arr[], int n) { for (int i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr1[] = {5, 2, 9, 1, 5, 6}; int n = sizeof(arr1) / sizeof(arr1[0]); printf("原数组:"); printArr(arr1, n); // 测试冒泡 bubbleSort(arr1, n); printf("冒泡排序后:"); printArr(arr1, n); return 0; }

运行结果

原数组:5 2 9 1 5 6 冒泡排序后:1 2 5 5 6 9

八、复杂度对比表

表格

排序最好最坏平均稳定原地
冒泡O(n)O(n²)O(n²)稳定
选择O(n²)O(n²)O(n²)不稳定
插入O(n)O(n²)O(n²)稳定

记忆口诀:

  • 冒泡:两两交换
  • 选择:选最小放前面
  • 插入:摸牌插位置

九、今日小练习

对数组{3, 1, 4, 2, 7, 5}分别用三种排序实现并输出结果。

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

5大突破:智能设计转码引擎如何重构开发范式

5大突破&#xff1a;智能设计转码引擎如何重构开发范式 【免费下载链接】FigmaToCode Generate responsive pages and apps on HTML, Tailwind, Flutter and SwiftUI. 项目地址: https://gitcode.com/gh_mirrors/fi/FigmaToCode 在数字产品开发的演进历程中&#xff0c;…

作者头像 李华
网站建设 2026/4/16 23:42:05

深入解析React Ace组件:从生命周期到渲染机制的完整指南

深入解析React Ace组件&#xff1a;从生命周期到渲染机制的完整指南 【免费下载链接】react-ace React Ace Component 项目地址: https://gitcode.com/gh_mirrors/re/react-ace React Ace是一个功能强大的代码编辑器组件&#xff0c;它将Ace编辑器无缝集成到React应用中…

作者头像 李华
网站建设 2026/4/16 23:39:42

py-googletrans完整指南:免费无限次的Google翻译API解决方案

py-googletrans完整指南&#xff1a;免费无限次的Google翻译API解决方案 【免费下载链接】py-googletrans (unofficial) Googletrans: Free and Unlimited Google translate API for Python. Translates totally free of charge. 项目地址: https://gitcode.com/gh_mirrors/p…

作者头像 李华
网站建设 2026/4/16 23:37:28

爱毕业aibiye力荐的9款查重工具,零成本无限检测,AI精准改写论文内容,提升原创性,学术研究更无忧。

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…

作者头像 李华
网站建设 2026/4/16 23:37:28

仅限奇点大会注册参会者获取的AI法律咨询部署清单(含12个司法辖区适配参数):错过本轮更新,2027年将强制升级

第一章&#xff1a;AI法律咨询系统在奇点大会的合规性定位与战略意义 2026奇点智能技术大会(https://ml-summit.org) AI法律咨询系统并非通用大模型的简单界面封装&#xff0c;而是在奇点大会技术治理框架下经严格合规校准的专业垂直系统。其核心定位是作为大会官方认可的“可…

作者头像 李华
网站建设 2026/4/16 23:37:28

PyFluent技术架构深度解析:如何构建工业级CFD自动化解决方案

PyFluent技术架构深度解析&#xff1a;如何构建工业级CFD自动化解决方案 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent PyFluent作为Ansys Fluent的Python接口&#xff0c;通过现代化的软件架构…

作者头像 李华