数组插入排序
- 第1次推导
public class test { public static void main(String[] args) { int[] ints = {2,5,3,1,8,9}; int tmp; // 存储临时变量 int j; // 开始比较第几位的数 // 第1次 // 2,5,3,1,8,9 j = 1; // 比较索引1的数 tmp = ints[j]; // 取出值放到临时变量中 if (j>0){ // 直到比到第0位 if(tmp>ints[j-1]){ // 取出的值比前一个值大,则直接跳出 // break; }else { // 反之则第0位的值覆盖第1位 ints[j]=ints[j-1]; } j--; // 上面直接跳出循环了,j=1 } // 第2次 // 2,5,3,1,8,9 // 2,3,5,1,8,9 j = 2; tmp = ints[j]; if (j>0){ // 直到比到第0位 if(tmp>ints[j-1]){ // 比较到中间时 ints[j]=tmp; // 取出的值比前一个值大,则直接跳出 // break; }else { // 反之则第0位的值覆盖第1位 ints[j]=ints[j-1]; } j--; // 比较第2次时就跳出了,j=1 } // 第3次 // 2,3,5,1,8,9 // 1,2,3,5,8,9 j = 3; tmp = ints[j]; if (j>0){ // 直到比到第0位 if(tmp>ints[j-1]){ // 比较到中间时 ints[j]=tmp; // 取出的值比前一个值大,则直接跳出 }else { // 反之则第0位的值覆盖第1位 ints[j]=ints[j-1]; } j--; // 需要比较3次,j=0 } // 如果tmp中存入的数是最小的,需要比较3次 // 当3次比较完后变成 2,2,3,5,8,9 // 需要将tmp插入位置0 if(j==0){ ints[0]=tmp; } } }
- 最终完善
public class test { public static void main(String[] args) { int[] ints = {2,5,3,1,8,9}; int tmp; // 存储临时变量 int j; // 需要与前面多个数比较 for (int i = 1; i < ints.length; i++) { // 需要取出数组长度-1次 tmp=ints[i]; j=i; // 取出第i个数,则至少比较i次,内循环 do{ if(tmp>ints[j-1]){ ints[j]=tmp; // 比较到中间位置结束的 break; // 直接结束的 }else { // 移动位置,内循环次数减1 ints[j]= ints[j-1]; j--; } }while (j>0); // 比到第0位时结束 // 当取出的数是最小的数时,赋值给第0位 if(j==0){ ints[0]=tmp; } } for (int i = 0; i < ints.length; i++) { System.out.println(ints[i]); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-09-29 马踏棋盘算法
2022-09-29 弗洛伊德算法
2022-09-29 迪杰斯特拉算法