插入排序

插入排序

直接插入排序

插入排序(Insertion-Sort) 的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

public static void sort(int[] arr){
        if (arr.length == 0) return;
        int curr = 0;
        for (int i = 0;i<arr.length-1;i++){
            curr = arr[i+1];
            int index = i;
            while (index>=0 && curr<arr[index]){
                arr[index+1] = arr[index];
                index--;
            }
            arr[index+1] = curr;
        }
    }

希尔排序(插入的改良版)

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。

先比直接插入排序,可以认为是增量为一的多次希尔排序,直接插入排序的增量是一,每次数据移动都是一位一位向后移动。而希尔排序会随着排序的次数缩小增量,最后增量变为一,并完成排序。

public static void sort(int[] arr){
        //定义跨度
        int gal = arr.length/2;
        int curr = 0;
        while (gal>0) {
            for (int i = gal; i < arr.length ; i++) {
                //插入操作
                curr = arr[i];
                int index = i - gal;
                while (index >= 0 && arr[index] > curr) {
                    arr[index + gal] = arr[index];
                    //根据增量跨度移动
                    index -= gal;
                }
                arr[index + gal] = curr;
            }
            gal /= 2;
        }
    }
posted @   鸭梨的药丸哥  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示