尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java 插入排序:抓牌怎么排,它就怎么排

Java 插入排序:抓牌怎么排,它就怎么排
📅 发布时间:2026/6/21 6:27:37

Java 插入排序:抓牌怎么排,它就怎么排

打麻将抓牌时你怎么理牌?插入排序就是那么干的

引言

插入排序(Insertion Sort)最贴近人类日常行为——手里有一副牌,新抓一张,从后往前找到合适位置插进去。

数据越有序,跑得越快。最好情况 O(n),最差 O(n²)。它不光是希尔排序的基石,更是 JDK Arrays.sort() 的核心组件之一,JDK 对小数组(< 47 个元素)默认就调用插入排序。

这篇文章,我会把插入排序讲透:

  • 用 ASCII 图演示"抓牌+理牌"的完整过程
  • 推导为什么"搬移元素"比"交换元素"更高效
  • 列出 4 个高频易错点(尤其是while条件里的>号)
  • 配套 LeetCode 147(链表插入排序)的工程实战

1. 核心思想:抓牌→理牌→再抓牌

1.1 通俗理解

想象你在打麻将,手里已经有了一堆排好序的牌:

手里:1万 3万 5万 7万(已排好序) 新抓:4万 操作:从右往左找,4万 应该插到 3万 和 5万 之间 结果:1万 3万 4万 5万 7万

1.2 ASCII 图解演示

以数组[5, 2, 4, 6, 1, 3]为例:

初始:[5, 2, 4, 6, 1, 3] 第 1 趟(i=1,key=2): 已排序部分:[5] key = 2,j = 0 arr[0] = 5 > 2,5 往后挪 → [_, 5] j = -1,退出循环 arr[0] = 2 结果:[2, 5, 4, 6, 1, 3] 第 2 趟(i=2,key=4): 已排序部分:[2, 5] key = 4,j = 1 arr[1] = 5 > 4,5 往后挪 → [2, _, 5] arr[0] = 2 < 4,停止 arr[1] = 4 结果:[2, 4, 5, 6, 1, 3] 第 3 趟(i=3,key=6): 已排序部分:[2, 4, 5] key = 6,j = 2 arr[2] = 5 < 6,停止 arr[3] = 6 结果:[2, 4, 5, 6, 1, 3] 第 4 趟(i=4,key=1): 已排序部分:[2, 4, 5, 6] key = 1,j = 3 arr[3] = 6 > 1,挪 → [2, 4, 5, _, 6] arr[2] = 5 > 1,挪 → [2, 4, _, 5, 6] arr[1] = 4 > 1,挪 → [2, _, 4, 5, 6] arr[0] = 2 > 1,挪 → [_, 2, 4, 5, 6] j = -1,退出 arr[0] = 1 结果:[1, 2, 4, 5, 6, 3] 第 5 趟(i=5,key=3): 已排序部分:[1, 2, 4, 5, 6] key = 3,j = 4 arr[4] = 6 > 3,挪 arr[3] = 5 > 3,挪 arr[2] = 4 > 3,挪 arr[1] = 2 < 3,停止 arr[2] = 3 结果:[1, 2, 3, 4, 5, 6]

1.3 三个关键观察

  1. 已排序部分逐步扩大:每趟结束后,前面 i+1 个元素一定有序
  2. 数据越有序,挪动越少:这就是为什么"基本有序"是插入排序的最佳场景
  3. 搬移 vs 交换: 一次搬移只移动一个元素(3 步赋值),一次交换要 3 步赋值(操作相同),但交换还会多做一次比较

2. 完整 Java 实现

importjava.util.Arrays;publicclassInsertionSort{/** * 插入排序(搬移元素版) * @param arr 待排序数组(原地修改) */publicstaticvoidinsertionSort(int[]arr){if(arr==null||arr.length<2){return;}intn=arr.length;// 从第 2 个元素开始(第 1 个视为已排序)for(inti=1;i<n;i++){intkey=arr[i];intj=i-1;// 把比 key 大的元素统统往后挪while(j>=0&&arr[j]>key){arr[j+1]=arr[j];j--;}// 插入 key 到正确位置arr[j+1]=key;}}

相关新闻

  • 流媒体下载失败频发?N_m3u8DL-RE 5分钟解决90%常见问题
  • 智慧农业机器人路径规划 采摘机器人数据集 农业机器人田垄识别数据集 YOLO格式数据集第10754期
  • Gemini 3.1 Pro实测:长上下文理解与结构化输出的工程落地指南

最新新闻

  • 天津全城黄金回收机构横评:合扬拿下 2026 天津 TOP1,资质合规流程全公开 - 开心测评
  • 网盘直链下载助手完整教程:告别限速,九大网盘一键高速下载
  • Python3+RIDE+RobotFramework自动化测试框架搭建与实战指南
  • 2026年6月国内优质的非能动氢气消除厂家推荐,催化器转化器/消氢催化剂,非能动氢气消除服务企业口碑推荐 - 品牌推荐师
  • 深圳2026年正规的沙盘定制生产厂哪家更值得选实力参考 - mypinpai
  • 怎么把照片改成413*626像素?2026照片像素精准调整工具指南 - 像素测评

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号