直接插入排序~

往有序的系列中插入一个元素,对于长度为len 数组,开始的 0 号元素是有些的,从第1 号元素开始,进行插入到前面有序的系列中

跟前面有序元素对比无序则立即插入排序

java 复制代码
        int[] data = {0,5,4,8,9,3,2,67,23};
        int len = data.length;

        for(int start_index = 1;start_index <= len -1;start_index++){
            int insert_data = data[start_index];
            for(int i = start_index -1;i >=0;i--){
                if(data[i]>insert_data){
                    data[i+1]=data[i];
                }else{
                    data[i+1]=insert_data;
                    break;
                }
            }
        }
    }

找到插入索引i+1 ,再一次性移动元素

java 复制代码
        int[] data = {0,5,4,8,9,3,2,67,23};
        int len = data.length;

        for(int start_index = 1;start_index <= len -1;start_index++){
            for(int i = start_index -1;i >=0;i--){
                if(data[start_index] > data[i] ){
                    //i+1 ~ start_index
                    if(i+1 == start_index)break;

                    int tmp = data[start_index];

                    for(int j = start_index -1; j >= i+1;j--){
                        data[j+1]=data[j];
                    }
                    data[i+1] = tmp;

                    break;
                }
            }
        }
    }

写希尔排序,直接将简单排序下表对用修改,发现这里少了一个逻辑判断,也就是当有序元素跟下一个比较元素相比都是逆序的,此时需要将第0个元素赋值为插入元素

复制代码
if(i == 0) data[i]=insert_data;
java 复制代码
            for(int start_index = 1;start_index <= len -1;start_index++){
                int insert_data = data[start_index];
                for(int i = start_index -1;i >=0;i--){
                    if(data[i]>insert_data){
                        data[i+1]=data[i];
                    }else{
                        data[i+1]=insert_data;
                        break;
                    }
                    if(i == 1) data[i]=insert_data;
                }
            }
相关推荐
努力中的编程者1 分钟前
二叉树(C语言底层实现)
c语言·开发语言·数据结构·c++·算法
重庆小透明5 分钟前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
大尚来也12 分钟前
PHP 反序列化漏洞深度解析:从原理利用到 allowed_classes 防御实战
android·开发语言·php
RuoyiOffice14 分钟前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
鹤旗14 分钟前
While语句,do-while语句,for语句
java·jvm·算法
雕刻刀15 分钟前
ERROR: Failed to build ‘natten‘ when getting requirements to build wheel
开发语言·python
qq_4160187216 分钟前
高性能密码学库
开发语言·c++·算法
NAGNIP18 分钟前
一文搞懂卷积神经网络经典架构-LeNet
算法·面试
小碗羊肉25 分钟前
【从零开始学Java | 第十八篇】BigInteger
java·开发语言·新手入门
宵时待雨27 分钟前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法