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

数组插入排序

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

    }
}
posted @ 2023-09-29 14:45  DogLeftover  阅读(4)  评论(0编辑  收藏  举报