Java四大基础排序+Arrays工具类
前言本节课核心分为 4 大块1.基础简单排序冒泡、选择、插入2.递归基础快速排序前置知识3.快速排序递归实现效率最高4.java.util.Arrays 数组工具类常用方法排序统一默认规则从小到大升序如需降序交换比较判断逻辑即可。一、冒泡排序 BubbleSort1.核心思想相邻两个元素两两比较左小右大不满足则交换每一轮循环结束当前未排序区间最大值会 “冒泡” 到区间最右侧。2.执行规律1.数组长度为 N一共执行 N-1 轮最后只剩 1 个元素天然有序无需比较2.第 i 轮结束倒数第 i 个位置数字确定最大值固定3.每一轮内层循环次数比上一轮少 1 次右侧已有序数据不用重复比较3.易错点索引越界内层循环判断 arr[j] 和 arr[j1]因此 j 最大只能到 arr.length-2必须-1防止 j1 超出数组下标。4.完整代码publicclassBubbleDemo{publicstaticvoidmain(String[]args){int[]arr{2,4,5,3,1};// 外层循环控制总轮数 N-1轮for(inti0;iarr.length-1;i){// 内层循环每轮两两比较-i 跳过右侧已排序数据优化效率for(intj0;jarr.length-1-i;j){if(arr[j]arr[j1]){// 交换两个元素借助第三方临时变量inttemparr[j];arr[j]arr[j1];arr[j1]temp;}}}System.out.println(Arrays.toString(arr));}}5.优缺点•优点逻辑最简单、容易手写、理解门槛低•缺点大量交换操作效率极低适合小规模数组二、选择排序 SelectSort1.核心思想固定当前索引位置拿该位置元素与后面所有未排序元素逐一对比找到最小值后交换到当前固定索引。2.执行规律1.数组长度 N执行 N-1 轮2.第 i 轮i 索引及之前全部有序从 i 开始处理无序区间3.每一轮只交换 1 次找到最小值再交换对比冒泡减少交换次数3.完整代码publicclassSelectionDemo{publicstaticvoidmain(String[]args){int[]arr{3,5,2,1,4};// 外层控制轮数i代表当前要放最小值的位置for(inti0;iarr.length-1;i){// 内层从i1开始和i位置元素对比for(intji1;jarr.length;j){if(arr[i]arr[j]){// 交换inttemparr[i];arr[i]arr[j];arr[j]temp;}}}System.out.println(Arrays.toString(arr));}}4.优缺点•优点交换次数远少于冒泡排序•缺点比较次数依旧很多整体效率仍偏低三、插入排序 InsertSort1.核心思想把数组分为左边有序区、右边无序区依次取出无序区第一个元素从后往前插入到有序区合适位置保证有序区始终升序。类比抓扑克牌手里是有序牌新摸到的牌依次插入对应位置。2.执行规律1.默认第 0 个元素天然有序无序区从索引 1 开始2.取出待插入元素向前循环对比若前面数字更大则后移直到找到插入位置3.稳定排序相等元素相对顺序不变3. 完整代码publicclassInsertDemo{publicstaticvoidmain(String[]args){int[]arr{3,44,38,5,47,15};// i无序区第一个元素索引从1开始for(inti1;iarr.length;i){intji;// j记录当前待插入元素下标单独变量避免破坏外层i// j0 防止越界当前数字 前一个数字则交换while(j0arr[j]arr[j-1]){inttemparr[j];arr[j]arr[j-1];arr[j-1]temp;j--;// 继续向前对比}}System.out.println(Arrays.toString(arr));}}4.优缺点•优点数据接近有序时效率极高稳定排序•缺点大规模乱序数组性能差四、递归快速排序前置1.递归定义方法内部调用自身的编程方式核心大事化小将大问题拆分为同类型小规模子问题。2. 递归两大必备条件缺一不可否则栈溢出递归出口终止条件满足时不再调用自身直接返回结果递推公式拆分逻辑每次调用参数向出口靠近3. 常见练习 1递归求 1~n 累加和公式getSum(n) n getSum(n-1)出口n 1 ; return 1publicstaticintgetSum(intnumber){if(number1){return1;// 出口}returnnumbergetSum(number-1);}调用 getSum(100) 结果 50504. 常见练习 2递归求阶乘 n!阶乘定义5! 5×4×3×2×1公式factorial(n) n * factorial(n-1)出口n 1 ; return 1publicstaticintgetJC(intnumber){if(number1){return1;}returnnumber*getJC(number-1);}调用 getJC(5) 结果 1205. 递归内存原理1.方法调用会压入栈内存main 方法最先入栈2.每次递归调用生成新的方法栈帧参数逐层减小3.触发出口后逐层返回结果方法依次出栈6. 常见报错StackOverflowError 栈内存溢出缺少递归出口 / 递归深度过大五、快速排序 QuickSort重点1.核心特点平均效率最高实际开发常用底层基于分治 递归2. 核心思想分治选定基准数 base教程默认取区间最左侧元素 arr[i]双指针start 从左找大于基准的数end 从右找小于基准的数两指针找到目标元素后交换直到 start end基准最终位置基准归位基准放到 start 下标此时基准左侧全部更小右侧全部更大递归处理基准左侧区间、右侧区间直到区间只有 1 个元素递归出口3. 关键硬性规则极易踩坑若基准取区间第一个元素循环查找时必须先移动 end 指针再移动 start 指针•先动 end相遇位置数字一定小于基准归位后满足左小右大•先动 start相遇位置数字大于基准归位破坏排序规则4. 完整递归代码importjava.util.Arrays;publicclassQuickSortDemo{publicstaticvoidmain(String[]args){int[]arr{6,1,2,7,9,3,4,5,1,8};quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}// arr数组 i区间左边界 j区间右边界publicstaticvoidquickSort(int[]arr,inti,intj){// 递归出口左边界 右边界区间无元素/只有1个无需排序if(ij){return;}intstarti;intendj;intbasearr[i];// 基准数取区间最左侧// 双指针循环直到start与end相遇while(start!end){// 1. 先移动end从右往左找 base 的数字while(startendarr[end]base){end--;}// 2. 再移动start从左往右找 base 的数字while(startendarr[start]base){start;}// 交换start、end指向元素inttemparr[start];arr[start]arr[end];arr[end]temp;}// 基准归位交换左边界i和相遇点startinttemparr[i];arr[i]arr[start];arr[start]temp;// 递归处理左区间 i ~ start-1quickSort(arr,i,start-1);// 递归处理右区间 start1 ~ jquickSort(arr,start1,j);}}5. 效率说明百万级随机数组排序速度远快于冒泡、选择、插入极端有序数组会退化日常场景最优。六、Arrays 数组工具类java.util.Arrays基础信息1.包路径java.util.Arrays使用必须导包2.无构造方法所有方法static 静态直接类名.方法名()调用常用方法汇总1.toString (数组)数组转字符串快速打印数组内容不用手动遍历int[]arr{1,3,2};System.out.println(Arrays.toString(arr));// [1, 3, 2]2.sort (数组)基础升序排序•基本数据类型数组底层快速排序默认升序int[]arr{3,1,2};Arrays.sort(arr);•引用类型数组Integer/String重载方法 sort(数组, Comparator)可自定义升降序注意仅支持包装类int 数组不能直接使用自定义比较器3.binarySearch (有序数组查找值)二分查找前置条件数组必须升序有序返回值规则1.元素存在返回对应下标2.元素不存在-(插入点)-1插入点该数字应该插入的位置保证数组有序减 1 是为了区分插入点 0防止返回 0 歧义示例数组 [2,4,6,8]查找 5 → 插入点 2返回 -2-1 -34.copyOf (原数组新数组长度)数组拷贝底层依赖System.arraycopy自动创建新数组1.新长度 原长度截取前半部分2.新长度 原长度完整复制3.新长度 原长度复制全部剩余位置填充默认值int 填 0int[]old{1,2,3};int[]newArrArrays.copyOf(old,5);// [1,2,3,0,0]*5.copyOfRange(数组from,to)区间拷贝*规则包头不包尾[from,to)包含 from 索引不包含to索引 javaint[]arr{1,2,3,4,5};int[]subArrays.copyOfRange(arr,1,4);// [2,3,4]6.fill (数组填充值)数组批量填充覆盖数组原有全部元素统一赋值int[]arrnewint[5];Arrays.fill(arr,100);// [100,100,100,100]七、四种基础排序对比速记表八、复习易错点汇总1.冒泡内层循环必须-1防下标越界-i优化有序区间2.选择排序内层循环从i1开始不要和自身对比3.插入排序单独定义 j 变量避免修改外层循环 i4.递归必须写出口否则栈溢出每次递归参数向出口靠近5.基准取左边界时快排双指针先移动 end 再移动 start6.Arrays.binarySearch 只对升序数组生效无序数组结果无意义7.copyOfRange 包头不包尾copyOf 长度超过原数组填充默认值

相关新闻

UE Niagara脚本编辑器深度解析:从Module Script到HLSL的完整工作流

UE Niagara脚本编辑器深度解析:从Module Script到HLSL的完整工作流

1. 项目概述:为什么我们需要深入理解Niagara脚本编辑器? 如果你正在用UE4/UE5做特效,尤其是那些需要大量粒子、复杂交互和动态演算的效果,Niagara系统绝对是你的核心武器。但很多朋友,包括我自己在刚开始的时候&#x…

2026/8/2 8:09:35 阅读更多 →
毕业答辩躺赢✨谁还在手动肝答辩PPT啊[特殊字符]

毕业答辩躺赢✨谁还在手动肝答辩PPT啊[特殊字符]

真心破防! 明明论文已经改到定稿了 结果被答辩PPT狠狠卡住进度! 不会梳理逻辑、不会提炼重点、排版巨丑、没有汇报思路 网上模板又乱又土,一点学术感都没有 还要自己写讲稿、准备答辩问题,越弄越焦虑😩 直到挖到…

2026/8/2 8:08:35 阅读更多 →
出海GEO实战:6大海外AI搜索场景的内容策略与优化方法

出海GEO实战:6大海外AI搜索场景的内容策略与优化方法

我那个做东南亚独立站的朋友,上个月突然在群里扔了张截图,Perplexity上搜他的品类词,出来的回答里,一大段产品描述直接照搬了他某篇博客的开头,但没带链接,也没提他网站的名字。他问我,这算好消…

2026/8/2 8:08:35 阅读更多 →

最新新闻

BetterGI:基于计算机视觉的原神智能辅助工具,告别重复劳动,重拾游戏乐趣

BetterGI:基于计算机视觉的原神智能辅助工具,告别重复劳动,重拾游戏乐趣

BetterGI:基于计算机视觉的原神智能辅助工具,告别重复劳动,重拾游戏乐趣 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动…

2026/8/2 9:02:02 阅读更多 →
kryonix 提交的DuckDB并行化有序缓冲 CTE 扫描 - #24361PR

kryonix 提交的DuckDB并行化有序缓冲 CTE 扫描 - #24361PR

并行化有序缓冲 CTE 扫描 - #24361 管道交换(pipeline exchange)可以通过批次索引在并行生产者之间保持顺序,但一个有序缓冲 CTE 消费者(consumer)之前被迫只能使用单个源任务。缓冲扫描暴露了一个平坦的数据块游标&a…

2026/8/2 9:02:02 阅读更多 →
适配媒体行业的固定资产管理软件有哪些功能与核心优势

适配媒体行业的固定资产管理软件有哪些功能与核心优势

做媒体行业的后勤资产管理,到底有多闹心?某地级市融媒体中心的资产管理员曾算过一笔账:全中心2100多件固定资产里,近6成是摄像机、镜头、收音设备、移动工作站这类外采装备,平时跟着记者跑现场、进演播厅,借…

2026/8/2 9:02:01 阅读更多 →
【sub2API部署或迁移】

【sub2API部署或迁移】

Sub2API 部署时配置已有 PostgreSQL 与 Redis 的方案及后期迁移指南 一、概述 Sub2API 支持两种部署方式:Docker Compose 容器化部署和二进制直接部署。无论采用哪种方式,都可以配置使用已有的外部 PostgreSQL 和 Redis 服务,而非使用项目自…

2026/8/2 9:02:01 阅读更多 →
3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案

3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案

3分钟QQ音乐解密指南:快速解锁加密音乐文件的终极方案 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…

2026/8/2 9:01:01 阅读更多 →
Grove扬声器Plus:从PWM原理到Arduino音频播放实战

Grove扬声器Plus:从PWM原理到Arduino音频播放实战

1. 项目概述:从“会响”到“好听”的硬件升级 如果你玩过Arduino或者树莓派,大概率接触过那种小小的、扁平的蜂鸣器或者无源扬声器模块。它们能发出“滴滴”声,做个简单的闹钟或者报警器没问题,但想让它播放一段音乐,或…

2026/8/2 9:01:01 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →