向有序数组插入数据,数组依然是有序的
数组降序的情况下插入数据依然是降序
- 第1次推导
public class test { public static void main(String[] args) { int[] ints = {90, 80, 70}; int tmp = 85; // 与第1个数比较时 // [0][1][2][] if (tmp>ints[0]){ // 后移 for(int j=ints.length; j>0; j--){ ints[j]=ints[j-1]; } // 长度++ // 插入位置0 ints[0]=tmp; // 结束整个循环 // break; }else { // 小于等于ints[0] // 不成立则continue,进入下一轮比较 } // 与第2个数比较时 // [0][1][2][] if (tmp>ints[1]){ // 后移 for(int j=ints.length; j>1; j--){ ints[j]=ints[j-1]; } // 长度++ // 插入位置1 ints[1]=tmp; // 结束整个循环 // break; }else { // 小于等于ints[1] // 不成立则continue,进入下一轮比较 } // 与第3个数比较时 // [0][1][2][] if (tmp>ints[2]){ // 后移 for(int j=ints.length; j>2; j--){ ints[j]=ints[j-1]; } // 长度++ // 插入位置1 ints[2]=tmp; // 结束整个循环 // break; }else { // 小于等于ints[2] // 不成立则continue,进入下一轮比较 } } }
- 最终完善
/** * 当tmp比最小的值还小时 * i < ints.length; 表示i<10 * 比较到最后时,tmp>ints[3],tmp>0 * 条件成立,则会执行ints[3]=tmp,执行成功 */ public class test1 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=90; ints[1]=80; ints[2]=70; int len=3; int tmp = 70; // 要插入的数 // [90][80][70][] // [0][1][2][] for (int i = 0; i < ints.length; i++) { if (tmp>ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } // 长度++ len++; // 插入位置0 ints[i]=tmp; // 结束整个循环 break; }else { // 小于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } } for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式2
public class test2 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=90; ints[1]=80; ints[2]=70; int len=3; int tmp = 70; // 要插入的数 // [90][80][70][] // [0][1][2][] for (int i = 0; i < len; i++) { if (tmp>ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } // 长度++ len++; // 插入位置0 ints[i]=tmp; // 结束整个循环 break; }else { // 小于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } } // 当插入的值比数组中最小的值还小时,插入到最后 if(tmp<=ints[len-1]){ ints[len]=tmp; len++; } for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式3
public class test3 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=90; ints[1]=80; ints[2]=70; int len=3; int tmp = 70; // 要插入的数 // [90][80][70][] // [0][1][2][] for (int i = 0; i < ints.length; i++) { if (tmp>ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } }else { // 小于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } // 长度++ len++; // 插入 ints[i]=tmp; // 结束整个循环 break; } // 打印 for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式4
/** * 条件是 i < len; * 当要插入的值是最小值时 * 比较到最后,tmp>ints[2],也就是tmp>70 * 条件不成立,直接跳出,最后还需要if判断 */ public class test4 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=90; ints[1]=80; ints[2]=70; int len=3; int tmp = 70; // 要插入的数 // [90][80][70][] // [0][1][2][] for (int i = 0; i < len; i++) { if (tmp>ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } }else { // 小于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } // 长度++ len++; // 插入 ints[i]=tmp; // 结束整个循环 break; } // 当插入的值比数组中最小的值还小时,插入到最后 if(tmp<=ints[len-1]){ ints[len]=tmp; len++; } // 打印 for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
数组升序的情况下插入数据依然是升序
- 方式1
/** * 条件是 i < ints.length; * 当插入的数比最大的数还大时 * 比较到最后,tmp<ints[3],tmp<0 * 条件不成立,所以最后还是要加if判断 */ public class test1 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=60; ints[1]=70; ints[2]=80; int len=3; int tmp = 80; // 要插入的数 // [0][1][2][] for (int i = 0; i < ints.length; i++) { if (tmp<ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } // 长度++ len++; // 插入位置0 ints[i]=tmp; // 结束整个循环 break; }else { // 大于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } } // 当插入的值比数组中最大的值还大时,插入到最后 if(tmp>=ints[len-1]){ ints[len]=tmp; len++; } // 打印 for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式2
public class test2 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=60; ints[1]=70; ints[2]=80; int len=3; int tmp = 80; // 要插入的数 // [0][1][2][] for (int i = 0; i < len; i++) { if (tmp<ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } // 长度++ len++; // 插入位置0 ints[i]=tmp; // 结束整个循环 break; }else { // 大于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } } // 当插入的值比数组中最大的值还大时,插入到最后 if(tmp>=ints[len-1]){ ints[len]=tmp; len++; } // 打印 for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式3
/** * 条件是 i < ints.length; * 当要插入的值是最大值时 * 比较到最后,tmp<ints[3],也就是tmp<0 * 条件不成立,直接跳出,最后还需要if判断 */ public class test3 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=60; ints[1]=70; ints[2]=80; int len=3; int tmp = 80; // 要插入的数 // [0][1][2][] for (int i = 0; i < ints.length; i++) { if (tmp<ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } }else { // 大于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } // 插入位置 ints[len]=tmp; // 长度++ len++; // 结束整个循环 break; } // 当插入的值比数组中最大的值还大时,插入到最后 if(tmp>=ints[len-1]){ ints[len]=tmp; len++; } // 打印 for (int i = 0; i < len; i++) { System.out.println(ints[i]); } } }
- 方式4
/** * 条件是 i < len; * 当要插入的值是最大值时 * 比较到最后,tmp<ints[2],也就是tmp<80 * 条件不成立,直接跳出,最后还需要if判断 */ public class test4 { public static void main(String[] args) { int[] ints = new int[10]; ints[0]=60; ints[1]=70; ints[2]=80; int len=3; int tmp = 80; // 要插入的数 // [0][1][2][] for (int i = 0; i < len; i++) { if (tmp<ints[i]){ // 后移 for(int j=len; j>i; j--){ ints[j]=ints[j-1]; } }else { // 大于等于ints[0] // 不成立则continue,进入下一轮比较 continue; } // 插入位置 ints[len]=tmp; // 长度++ len++; // 结束整个循环 break; } // 当插入的值比数组中最大的值还大时,插入到最后 if(tmp>=ints[len-1]){ ints[len]=tmp; len++; } // 打印 for (int i = 0; i < len; 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 迪杰斯特拉算法