展开
拓展 关闭
订阅号推广码
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 @ 2023-09-29 14:58  DogLeftover  阅读(16)  评论(0编辑  收藏  举报