展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

向有序数组插入数据,数组依然是有序的

数组降序的情况下插入数据依然是降序

  • 第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]);
}
}
}
posted @   DogLeftover  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-09-29 马踏棋盘算法
2022-09-29 弗洛伊德算法
2022-09-29 迪杰斯特拉算法
点击右上角即可分享
微信分享提示