Java 基础排序算法:冒泡排序与简单选择排序 Java 基础排序算法冒泡排序与简单选择排序摘要本文介绍两种基础排序算法——冒泡排序与简单选择排序。冒泡排序通过相邻元素两两比较并交换将最大值逐趟“冒泡”至末尾平均时间复杂度 (O(n^2))为稳定排序简单选择排序每趟扫描未排序区间找出最小值并与首位交换时间复杂度恒为 (O(n^2))为不稳定排序。两种算法空间复杂度均为 (O(1))文中均给出 Java 实现与测试示例。目录一、冒泡排序(bubbleSort)二、简单选择排序(simpleSelectSort)一、冒泡排序(bubbleSort)算法核心比较一组序列中相邻的两个元素如果出现逆序就交换。每一趟冒泡排序会将序列中最大值(或最小值)冒泡到序列的最后一个位置上像水中的泡泡一样上浮所以叫冒泡排序。核心要点只和紧邻下一个元素对比每完成一轮内层循环末尾一个元素已经排好序下一轮循环长度-1不再遍历已排序尾部冒泡排序算法的特点时间复杂度:最坏逆序(O(n^2))最好有序优化后(O(n))平均 (O(n^2))空间复杂度(O(1))原地排序仅用临时变量交换稳定性稳定排序相等元素不会交换位置相对顺序不变JAVA语言实现冒泡排序packagecom.lgq.ruankao.practice;/** * author lgq * email * date 2026/8/11 13:31 *//** * 冒泡排序 */publicclassMain1{publicstaticvoidbubbleSort(int[]arr){// 增加判空处理防止空指针异常让代码更健壮if(arrnull||arr.length2){return;}intnarr.length-1;for(inti0;in;i){// flag用来记录这一趟排序是否发生了交换booleanflagfalse;for(intj0;jn-i;j){if(arr[j]arr[j1]){inttemparr[j];arr[j]arr[j1];arr[j1]temp;flagtrue;}}// 当flagfalse时就说明整个序列已经有序了不需要在比较了直接退出循环即可if(!flag){break;}}}publicstaticvoidprintArr(int[]arr){if(arrnull||arr.length1){return;}for(inti0;iarr.length;i){System.out.print(arr[i] );}System.out.println();}// 测试publicstaticvoidmain(String[]args){// 定义一个序列int[]arr{3,1,5,7,2,4,9,6,8};// 打印排序前的序列System.out.print(排序前的序列);printArr(arr);// 调用冒泡排序方法bubbleSort(arr);System.out.print(排序后的序列);printArr(arr);}}二、简单选择排序(simpleSelectSort)算法核心从头到尾扫描一组无序的序列找出最小的元素与序列的第一位元素交换并加入到排好序的序列中去(一开始排好序的序列是空的)这样就完成了第一趟的简单选择排序。然后从剩下的元素开始重复上面的操作这样就又会得到最小的元素将最小的元素也加入到排好序的序列中去。核心要点查找最小值下标定点交换简单选择排序算法的特点时间复杂度最好 / 最坏 / 平均均为 (O(n^2))空间复杂度(O(1))原地排序稳定性不稳定排序相等元素会改变相对位置伪代码n数组长度forifrom0to n-1:minIndexi//假定当前首位是最小值//遍历未排序区间找真正最小值下标forjfromi1to n-1:ifarr[j]arr[minIndex]:minIndexj//一轮只交换一次 swap(arr[i],arr[minIndex])JAVA语言实现简单选择排序packagecom.lgq.ruankao.practice;/** * author lgq * email * date 2026/8/11 17:21 */importstaticcom.lgq.ruankao.util.ArrUtil.printArr;importstaticcom.lgq.ruankao.util.ArrUtil.swap;/** * 简单选择排序 */publicclassMain2{publicstaticvoidsimpleSelectSort(int[]arr){for(inti0;iarr.length-1;i){intminValueIndexi;// arr.length-1 会漏掉最后一个元素最小值找不全因此内层循环的边界是arr.lengthfor(intji1;jarr.length;j){if(arr[j]arr[minValueIndex]){minValueIndexj;}}// 将序列的第一个元素与序列中的最小值进行交换// 传入数组和两个下标swap(arr,i,minValueIndex);}}// 测试publicstaticvoidmain(String[]args){int[]arr{1,3,2,4,5,7,8,9,6};// 打印排序前的序列System.out.print(排序前的序列);printArr(arr);// 调用冒泡排序方法simpleSelectSort(arr);System.out.print(排序后的序列);printArr(arr);}}交换函数工具类packagecom.lgq.ruankao.util;/** * author lgq * email * date 2026/8/12 9:34 */publicclassArrUtil{publicstaticvoidprintArr(int[]arr){if(arrnull||arr.length1){return;}for(inti0;iarr.length;i){System.out.print(arr[i] );}System.out.println();}// 交换a和b的值publicstaticvoidswap(int[]arr,inti,intj){inttemparr[i];arr[i]arr[j];arr[j]temp;}}

相关新闻

最新新闻

C语言字符串函数深度解析:从安全漏洞到高效编程实战

C语言字符串函数深度解析:从安全漏洞到高效编程实战

1. 项目概述:为什么字符串函数是C语言的基石 干了这么多年C语言开发,我越来越觉得,字符串处理能力是衡量一个C程序员基本功最直接的标尺。你可能精通各种算法,能徒手写出红黑树,但如果让你处理一个带分隔符的日志文件&…

2026/8/13 10:14:28
抖音下载器终极指南:一键批量下载无水印视频与直播内容

抖音下载器终极指南:一键批量下载无水印视频与直播内容

抖音下载器终极指南:一键批量下载无水印视频与直播内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…

2026/8/13 10:14:28
FigmaCN终极指南:如何让Figma界面秒变中文,3分钟快速上手

FigmaCN终极指南:如何让Figma界面秒变中文,3分钟快速上手

FigmaCN终极指南:如何让Figma界面秒变中文,3分钟快速上手 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?FigmaCN是一…

2026/8/13 10:14:28
PHP开发实战:从环境配置、代码调试到安全部署的完整解决方案

PHP开发实战:从环境配置、代码调试到安全部署的完整解决方案

1. 项目概述:PHP开发中的“日常”与“战斗” 干了十多年Web开发,PHP就像我工具箱里那把用得最趁手的螺丝刀,天天见,天天用。但越是熟悉,就越清楚它哪里容易“滑丝”,哪里需要“上点油”。今天聊的“PHP中的…

2026/8/13 10:14:28
企业考试系统如何对接OA、钉钉和企业微信?SSO单点登录、组织同步与权限一致性设计

企业考试系统如何对接OA、钉钉和企业微信?SSO单点登录、组织同步与权限一致性设计

前言:企业为什么越来越不愿意维护“第二套人员库”很多企业第一次采购在线考试系统时,关注的是:能不能建题库;能不能随机组卷;能不能在线考试;能不能自动判分;能不能统计成绩。但系统真正上线以…

2026/8/13 10:14:28
OpenClaw企业化实战:五大进阶配置构建高可用数据自动化平台

OpenClaw企业化实战:五大进阶配置构建高可用数据自动化平台

1. 项目概述:从开源工具到企业级解决方案的跃迁OpenClaw,这个名字在开源社区里已经不算陌生了。它本质上是一个功能强大的自动化数据抓取与处理框架,凭借其灵活的配置和强大的扩展能力,成为了许多开发者和数据工程师手中的“瑞士军…

2026/8/13 10:09:28