如何理解插入排序?
算法原理:相当于抓牌,每次新抓的牌要保证有序,将新抓的牌与前面进行依次比较,如果比前面的小,进行交换。一直保证每次抓的牌,插入后的牌是基本有序。
例子:【3,2,5,4,2,3,3】排序,从小到大排序。
- 要确保【0,0】范围要有序,因为只有一个数字3,所以肯定是有序的,无需交换
排序前:【】
新抓的牌【3】 待排序:【2,5,4,2,3,3】
排序后:【3】 - 要确保【0,1】范围要有序,此时相当于2是新抓的牌,和前面的牌比较(数字比较大小),交换数字2,3
排序前:【3】
新抓的牌【2】 待排序:【5,4,2,3,3】
排序后:【2,3】 - 要确保【0,2】范围要有序,此时新抓的牌是5,和前面的排序的数字牌进行依次比较,即是将5和2,3,5是比3大,不需要移动。5比3大,无需要进行移动。
排序前:【2,3】
新抓的牌【5】 待排序:【4,2,3,3】
排序后:【2,3,5】 - 要确保【0,3】范围要有序,此时新抓的牌是4,和前面的排序的数字牌进行依次比较,即是将4和2,3,5比较。4比5小,交换。后面的无需移动
排序前:【2,3,5】
新抓的牌【4】 待排序:【2,3,3】
插入后:【2,3,5,4】 4比5小 交换
排序后:【2,3,4,5】 4比后面的都要大,无需要移动 - 要确保【0,4】范围要有序,此时新抓的牌是2,和前面的排序的数字牌进行依次比较,即是将2和2,3,4,5比较。
排序前:【2,3,4,5】
新抓的牌【2】 待排序:【3,3】
插入后:【2,3,4,5,2】 2比5小,交换
排序后:【2,3,4,2,5】 2比4小,交换
排序后:【2,3,2,4,5】 2比3小,交换
排序后:【2,2,3,4,5】无需要交换 - 要确保【0,5】范围要有序,此时新抓的牌是3,和前面的排序的数字牌进行依次比较,即是将3和2,2,3,4,5比较。
排序前:【2,2,3,4,5】
新抓的牌【3】 待排序:【3】
插入后:【2,2,3,4,5,3】 3比5小,交换
排序后:【2,2,3,4,3,5】 3比4小,交换
排序后:【2,2,3,3,4,5】 3比3一样大,无需要交换 - 要确保【0,6】范围要有序,此时新抓的牌是3,和前面的排序的数字牌进行依次比较,即是将3和2,2,3,3,4,5比较。重复6操作
点击查看代码
public static void insertionSort(int [] arr)
{
if(arr==null||arr.length <2){
return;
}
for(int i = 1;i< arr.length;i++) //做到0-i上有序
{
for(int j =i-1;j>=0&&arr[j)>arr[j+1];j--){
swap(arr,j,j+1);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现