首页 > 其他分享 >向有序数组插入数据,数组依然是有序的

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

时间:2023-09-29 15:12:46浏览次数:34  
标签:tmp 有序 int ++ len 插入 ints 数组

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

  • 第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]);
        }

    }
}

标签:tmp,有序,int,++,len,插入,ints,数组
From: https://www.cnblogs.com/dogleftover/p/17737005.html

相关文章

  • 数组冒泡排序
    第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={6,5,9,5};inttmp;if(ints[0]>ints[1]){tmp=ints[0];ints[0]=ints[1];ints[1]=tmp;}......
  • 数组插入排序
    第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={2,5,3,1,8,9};inttmp;//存储临时变量intj;//开始比较第几位的数//第1次//2,5,3,1,8,9j=1;//比较索引1的数......
  • 【word中如何插入带圆圈的数字编号】
    第一种方法在插入菜单栏选择编号输入需要插入的数字,并选择编号类型即可成功创建一个圆圈数字编号第二种方法在输入原本的数字后,选中数字,点击开始菜单栏中的字选择所需的符号点击确定即可成功添加带圈文字,但此种方法所创建的符号视觉上并不是很好看,所以要根据个人具体所......
  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • 20.创建和插入节点
    创建和插入节点:获得某个DOM节点,假如这个DOM节点是空的,可以通过innerHTML增加一个元素,但是如果这个DOM节点已经有元素了,那就不能听过innerHTML来新增元素,这样会覆盖原来的元素appendChild追加元素父级名字.appendChild(要追加的元素名字);document.createElement(‘p’)创建一......
  • c语言,一维数组指针
    @TOC前言今天我们讲一下一维数组指针。一、一维数组指针的定义:概述:数组指针,就是数组类型的指针。数组里面的每一个元素都是一个地址。可以让数组指针指向一个数组的地址,通过地址遍历数组的各个元素。定义一维数组指针的步骤:inta[5]={4,5,6,7,8};//定义一个数组int(*......
  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.计算数组nums的总和sum......
  • 前端 数组删除元素
    以下是几种常用的数组删除数据的方式:使用pop()方法:pop()方法用于删除数组的最后一个元素,并返回被删除的元素。//示例数组letarr=[1,2,3,4];//删除最后一个元素letremovedElement=arr.pop();console.log(arr);//[1,2,3]console.log(removedElement);//4使......
  • 小程序数组数据变化渲染的不是最新值?
    微信小程序切换后数据不是最新值如果是相同的key此时vue会跳过更新复用上次的dom和值,把第二个的别名item换成不相同的,比如item1,还不行就第二个的index换成index1key也换成index1<viewclass="queryCert-result-list"v-if="list.length>0"><viewclass="queryCert-result-list......
  • 数组能改变大小吗
    提问数组能改变大小吗回答能usingSystem;publicclassSamplesArray{publicstaticvoidMain(){//Createandinitializeanewstringarray.String[]myArr={"The","quick","brown","fox","jump......