发布时间:2026/7/14 4:02:18
简单排序算法总结:冒泡排序、选择排序与插入排序
1. 引言排序是计算机科学中最基础且重要的算法类别之一它将一组数据按照特定顺序如升序或降序重新排列。简单排序算法虽然时间复杂度较高但其思想直观、实现简单是理解更复杂排序算法如快速排序、归并排序的基石。本文将对三种经典的简单排序算法——冒泡排序、选择排序和插入排序——进行总结分析其原理、步骤、代码实现及性能特点。2. 冒泡排序 (Bubble Sort)2.1 算法思想冒泡排序通过重复遍历待排序序列依次比较相邻的两个元素如果它们的顺序错误例如前一个大于后一个而我们希望升序就交换它们的位置。每一轮遍历都会将当前未排序部分的最大或最小元素“冒泡”到其正确位置序列的末尾。2.2 步骤描述从序列的第一个元素开始比较相邻的两个元素。如果顺序不符合要求例如升序时前一个大于后一个则交换它们。对每一对相邻元素重复步骤1-2直到序列末尾。完成第一轮后最大或最小元素已“沉”到末尾。对剩余未排序的元素重复上述过程每次遍历的范围减少一个元素因为末尾已排序好。重复步骤直到没有任何一对元素需要交换此时序列排序完成。2.3 代码示例 (Java)public class BubbleSort { public static void bubbleSort(int[] arr) { int n arr.length; boolean swapped; for (int i 0; i n - 1; i) { swapped false; // 每次遍历将最大的元素冒泡到末尾 for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { // 交换 arr[j] 和 arr[j1] int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; swapped true; } } // 如果本轮没有发生交换说明数组已经有序提前结束 if (!swapped) { break; } } } public static void main(String[] args) { int[] arr {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.println(排序后的数组:); for (int num : arr) { System.out.print(num ); } } }2.4 性能分析时间复杂度最坏情况逆序O(n²)平均情况O(n²)最好情况已有序且使用优化标志O(n)空间复杂度O(1)原地排序。稳定性稳定相等元素不会交换。3. 选择排序 (Selection Sort)3.1 算法思想选择排序将序列分为已排序和未排序两部分。每次从未排序部分中选出最小或最大的元素将其与未排序部分的第一个元素交换位置从而将其加入到已排序部分的末尾。如此反复直到所有元素排序完毕。3.2 步骤描述在未排序序列中找到最小或最大元素。将其与未排序序列的第一个元素交换位置。此时该元素已位于其最终排序位置已排序部分的末尾。将序列的边界已排序部分与未排序部分的分界向后移动一位。重复上述过程直到未排序部分为空。3.3 代码示例 (Java)public class SelectionSort { public static void selectionSort(int[] arr) { int n arr.length; for (int i 0; i n - 1; i) { // 假设当前索引 i 处的元素是最小的 int minIndex i; // 在 i1 到 n-1 的范围内寻找真正的最小值索引 for (int j i 1; j n; j) { if (arr[j] arr[minIndex]) { minIndex j; } } // 将找到的最小元素与位置 i 的元素交换 if (minIndex ! i) { int temp arr[i]; arr[i] arr[minIndex]; arr[minIndex] temp; } } } public static void main(String[] args) { int[] arr {64, 25, 12, 22, 11}; selectionSort(arr); System.out.println(排序后的数组:); for (int num : arr) { System.out.print(num ); } } }3.4 性能分析时间复杂度无论数据初始状态如何都需要进行 O(n²) 次比较因此最好、最坏、平均时间复杂度均为 O(n²)。空间复杂度O(1)原地排序。稳定性不稳定例如序列 [5a, 8, 5b, 2, 9]第一次选择最小元素2与5a交换后5a和5b的相对顺序改变了。4. 插入排序 (Insertion Sort)4.1 算法思想插入排序的工作方式类似于整理手中的扑克牌。它将序列视为已排序和未排序两部分初始时已排序部分只包含第一个元素。然后依次将未排序部分的每个元素插入到已排序部分的适当位置直到所有元素都插入完毕。4.2 步骤描述从第二个元素开始第一个元素视为已排序。取出当前元素称为“键”在已排序序列中从后向前扫描。如果已排序序列中的元素大于键则将该元素向后移动一位。重复步骤3直到找到已排序元素小于或等于键的位置。将键插入到该位置之后。重复步骤2-5直到所有元素处理完毕。4.3 代码示例 (Java)public class InsertionSort { public static void insertionSort(int[] arr) { int n arr.length; for (int i 1; i n; i) { int key arr[i]; // 待插入的元素 int j i - 1; // 将大于 key 的元素向后移动 while (j 0 arr[j] key) { arr[j 1] arr[j]; j--; } // 插入 key 到正确位置 arr[j 1] key; } } public static void main(String[] args) { int[] arr {12, 11, 13, 5, 6}; insertionSort(arr); System.out.println(排序后的数组:); for (int num : arr) { System.out.print(num ); } } }4.4 性能分析时间复杂度最坏情况逆序O(n²)平均情况O(n²)最好情况已有序O(n)空间复杂度O(1)原地排序。稳定性稳定只有当前元素小于已排序元素时才移动等于时不移动。特点对于小规模或基本有序的数据集插入排序效率很高常作为高级排序算法如快速排序、归并排序在小规模子问题上的优化手段。5. 三种算法对比总结算法平均时间复杂度最好情况最坏情况空间复杂度稳定性主要特点冒泡排序O(n²)O(n) (优化后)O(n²)O(1)稳定思想简单效率低可通过标志位优化选择排序O(n²)O(n²)O(n²)O(1)不稳定交换次数少最多 n-1 次但比较次数固定插入排序O(n²)O(n)O(n²)O(1)稳定对小规模或基本有序数据高效适合增量排序6. 总结与适用场景冒泡排序、选择排序和插入排序都是基于比较的简单排序算法时间复杂度为 O(n²)不适合大规模数据排序。但它们各有特点冒泡排序教学意义大于实用价值有助于理解排序的基本概念。选择排序交换次数少当数据移动成本高时有一定优势。插入排序在实际应用中仍有价值尤其适用于小规模数据如 n ≤ 10或基本有序的数据也常作为高级排序算法的子过程。理解这些简单算法是学习更高效排序算法如快速排序 O(n log n)的重要基础。在实际开发中应优先使用语言内置的排序函数如 Java 的Arrays.sort()它们通常经过高度优化。

相关新闻

2022年五大主流AI编程框架选型指南:PyTorch、TensorFlow、JAX、Scikit-learn与FastAI实战解析
2026/7/14 4:02:18

2022年五大主流AI编程框架选型指南:PyTorch、TensorFlow、JAX、Scikit-learn与FastAI实战解析

1. 项目概述:为什么是这五个框架,而不是其他几十个? 你打开任何一份AI工程师的招聘JD,几乎都会看到“熟练掌握Python”这一条。但真正决定你能不能把模型跑起来、调得动、部署出去的,从来不是Python语法本身&#xff0…

阅读更多
遗传算法Python实战:从原理到100皇后可运行代码
2026/7/14 4:02:18

遗传算法Python实战:从原理到100皇后可运行代码

1. 项目概述:从理论到可运行代码的遗传算法实战落地你有没有试过,读完一篇讲遗传算法(Genetic Algorithm, GA)原理的文章,脑子里全是“选择、交叉、变异、适应度”,可一合上屏幕,面对一个具体问…

阅读更多
AI工具如何高效辅助毕业论文写作全流程
2026/7/14 4:02:18

AI工具如何高效辅助毕业论文写作全流程

1. 项目概述:AI工具如何重构毕业论文写作流程第一次接触毕业论文写作的学生,往往会被动辄上万字的写作体量吓到。传统写作模式下,从选题到最终定稿需要经历文献查阅、大纲构建、初稿撰写、格式调整、查重降重等多个环节,整个过程既…

阅读更多
自动化测试分类
2026/7/14 7:02:19

自动化测试分类

自动化测试分类(面试直接背,超清晰) 一、按测试层级分 单元自动化测试 测代码方法、函数、接口底层逻辑 工具:JUnit、TestNG、PyTest 接口自动化测试(企业最常用) 前后端接口、服务之间接口自动化跑通 工具:Postman、JMeter、Apifox、HttpClient、Requests UI自动化测试…

阅读更多
基于OpenGL与TensorRT的PC端实时人脸美颜技术解析
2026/7/14 7:02:19

基于OpenGL与TensorRT的PC端实时人脸美颜技术解析

1. 项目背景与核心价值在视频直播和远程会议成为主流的今天,实时人脸美颜技术已经从手机端走向PC端,成为提升用户体验的关键功能。这个基于OpenGL和TensorRT的实时美颜系统,完美解决了传统美颜方案在PC端性能不足的问题。我在实际开发中发现&…

阅读更多
C++ STL迭代器深度解析:从核心概念到自定义实现与实战应用
2026/7/14 7:02:19

C++ STL迭代器深度解析:从核心概念到自定义实现与实战应用

1. 项目概述:为什么迭代器是C STL的灵魂如果你写过C,尤其是用过STL(标准模板库),那你一定绕不开迭代器。但很多时候,我们只是把它当作一个“指针”来用,for(auto it vec.begin(); it ! vec.end…

阅读更多
ADP5350与STM32L162ZE的低功耗电源管理方案设计
2026/7/14 7:02:19

ADP5350与STM32L162ZE的低功耗电源管理方案设计

1. 项目背景与核心需求在嵌入式系统设计中,电源管理一直是决定产品可靠性和续航能力的关键因素。ADP5350作为ADI公司推出的高性能电源管理IC(PMIC),与STMicroelectronics的低功耗微控制器STM32L162ZE的组合,为需要精密电源控制的物联网设备、…

阅读更多
数据结构-线性表第一篇
2026/7/14 7:02:19

数据结构-线性表第一篇

前言最近二刷了数据结构顺序表的视频课程,第一遍学的时候,C语言结构体、动态内存分配、指针这些基础掌握得并不扎实,只是跟着敲了一遍代码,似懂非懂。这次特意从头重学,课件作为核心思路参考,所有代码全程自…

阅读更多
Actus F8一键神器:鼠标连点与键盘自动化全攻略
2026/7/14 6:02:19

Actus F8一键神器:鼠标连点与键盘自动化全攻略

# Actus F8一键神器:鼠标连点与键盘自动化全攻略在重复性任务泛滥的数字化时代,无论是游戏挂机、办公数据录入,还是软件测试中的高频点击,自动化工具已成为提升效率的利器。今天,我们将深入剖析一款免费且轻量级的自动…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/14 6:43:28

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/12 0:01:57

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/13 17:34:38

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
DeepSeek提示词效果暴跌预警:当LLM置信度低于0.62时,必须启用的4层动态重写机制
2026/7/14 0:02:17

DeepSeek提示词效果暴跌预警:当LLM置信度低于0.62时,必须启用的4层动态重写机制

更多请点击: https://codechina.net 第一章:DeepSeek提示词效果暴跌预警:当LLM置信度低于0.62时,必须启用的4层动态重写机制 当DeepSeek-R1或DeepSeek-V3模型返回的token级置信度(logits softmax归一化后最大概率值&a…

阅读更多
Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?
2026/7/14 0:02:17

Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

更多请点击: https://codechina.net 第一章:Perplexity 怎么用 Perplexity 是衡量语言模型预测能力的核心指标,数值越低表示模型对文本序列的不确定性越小、预测越精准。它本质上是交叉熵损失的指数形式,计算公式为:…

阅读更多
AD74412R与STM32F407ZG在工业信号采集中的高效应用
2026/7/14 0:02:17

AD74412R与STM32F407ZG在工业信号采集中的高效应用

1. 为什么选择AD74412R与STM32F407ZG组合?在工业控制和嵌入式系统设计中,信号采集与处理的实时性、精度和稳定性往往是核心挑战。AD74412R作为ADI公司推出的四通道软件可配置I/O解决方案,与STMicroelectronics的STM32F407ZG高性能微控制器组合…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/13 21:11:56

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/13 1:50:37

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/13 13:09:00

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多