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/10/16 18:45:17 阅读更多 →
毕业答辩躺赢✨谁还在手动肝答辩PPT啊[特殊字符]

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

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

2026/10/16 21:48:31 阅读更多 →
出海GEO实战:6大海外AI搜索场景的内容策略与优化方法

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

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

2026/10/16 22:05:16 阅读更多 →

最新新闻

CSDN+AI:程序员新生产力的技术演进路径

CSDN+AI:程序员新生产力的技术演进路径

我需要先读取「7. 总结与展望」这一节的精确 HTML,以便在正确的位置补充完整内容。已在文章末尾完整补充「7. 总结与展望」章节,包含全文核心观点回顾、三个实战案例的关键收获、脚本质量与安全审查要点、未来 AI 辅助运维的发展趋势,以及给读…

2026/10/17 13:34:38 阅读更多 →
CTF隐写题入门:Base64隐写、LSB图片隐写与文件分离实战

CTF隐写题入门:Base64隐写、LSB图片隐写与文件分离实战

1. 隐写题的共性套路:拿到文件先别急着“看”CTF里的Misc(杂项)题目,说白了就是考“找藏起来的东西”。这个方向不像PWN和逆向那样门槛极高,但特别考验信息收集的完整度和对各种编码格式的敏感度。很多时候题目本身不难…

2026/10/17 13:34:38 阅读更多 →
图像切割与特征提取实战:从原始图像到特征矩阵的完整流程

图像切割与特征提取实战:从原始图像到特征矩阵的完整流程

1. 图像切割:拿到一张图,先想清楚要“切谁”1.1 切割在整个预处理链路里的位置“数据预处理与特征工程”这个系列写到这里,终于轮到图像切割与特征提取这对组合。很多人容易忽略一件事:图像任务里真正的胜负手,往往不在…

2026/10/17 13:34:38 阅读更多 →
传一个关键词,影刀自己上小红书搜图、翻笔记、点赞收藏发评论|AI 流程助手全链路复盘

传一个关键词,影刀自己上小红书搜图、翻笔记、点赞收藏发评论|AI 流程助手全链路复盘

目录引言研究背景与意义文献综述研究方法与设计数据收集与处理结果分析讨论与启示结论与展望参考文献附录摘要本研究聚焦于[具体研究主题],旨在探讨[核心问题或目标]。通过系统梳理相关文献,结合定量与定性相结合的研究方法,对[研究对象或数据…

2026/10/17 13:34:38 阅读更多 →
前端学习底层逻辑:从解决问题出发,构建稳固技术地基

前端学习底层逻辑:从解决问题出发,构建稳固技术地基

1. 先别急着列技术清单:前端学习的底层逻辑1.1 我把问题从"学什么"改成了"解决什么"时不时有人带着一张截图来找我,上面密密麻麻列着几十项技术名词,问我说"这些是不是都得学,哪个先学哪个后学"。我…

2026/10/17 13:34:38 阅读更多 →
并行优化算法研究PPT深度拆解:知识框架、算法分类与性能优化避坑指南

并行优化算法研究PPT深度拆解:知识框架、算法分类与性能优化避坑指南

简介:这份演示文稿聚焦并行优化算法,面向需要入门并行计算与智能优化方法的开发者、研究生及相关从业者,系统梳理了该领域的核心知识体系。内容从并行优化算法的发展历程与基本原理入手,覆盖并行计算的硬件与软件基础,…

2026/10/17 13:33:37 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →