常见插入排序算法的实现(直接插入排序与希尔排序)

目录

直接插入排序

直接插入排序的特性总结:

希尔排序(缩小增量排序)

希尔排序的特性总结:


插入排序的实现有许多,所以在这篇文章主要介绍,两种比较主流的插入排序实现。

直接插入排序

概括 :直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到 一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到 一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。

插入原理:当插入第i(i>=1)个元素时,前面的array0,array1,...,arrayi-1已经排好序,此时用arrayi的排序码与arrayi1,arrayi-2,...的排序码顺序进行比较,找到插入位置即将arrayi插入,原来位置上的元素顺序后移

排序演示

代码实现:

复制代码
public void insertSort( int [] arr){
    for (int i = 1; i < arr.length; i++) {
        int tmp = arr[i];
        int j = i-1;
        for(;j >= 0 ; j--){
            if(tmp < arr[j]){
                arr[j+1] = arr[j];
            }else {
                break;
            }
        }
        arr[j+1] = tmp;
    }
}

直接插入排序的特性总结:

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高

  2. 时间复杂度:O(N^2)

  3. 空间复杂度:O(1),它是一种稳定的排序算法

  4. 稳定性:稳定

希尔排序(缩小增量排序)

希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组, 所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达x=1时,所有记录在统一组内排好序。

希尔排序与直接插入排序的关系:希尔排序可以说是对直接插入排序的优化,可以想象一下,如果是一个非常大数组且元素顺序混乱,如果直接使用插入排序的效率会非常低效,因为直接插入排序,非常受元素顺序的影响,元素顺序越有序,效率越高,反之,越低。

因此希尔排序的缩小增量法,有效优化了直接插入排序的缺点。

代码实现:

复制代码
public void sherSort(int[] arr , int gap){

    for (int i = gap; i < arr.length; i+= gap) {

        int tmp = arr[i];

        int j = i-gap;

        for(;j >= 0 ; j-= gap){

            if(tmp < arr[j]){

                arr[j+gap] = arr[j];

            }else {

                break;

            }

        }

        arr[j+gap] = tmp;

    }

    if (gap > 1){

        sherSort(arr ,gap/2);

    }

}

希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。

  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很 快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排 序的时间复杂度都不固定:

相关推荐
StevenLdh2 小时前
第八期 · 情绪闯关挑战盒:一个「无惩罚」成就系统的数据建模
java·微信小程序
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务消费者
java·dubbo·交友
IT研究室3 小时前
最新计算机毕业设计选题推荐-基于spring boot的教育学习平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
余额瞒着我当琳3 小时前
C++算法学习篇5--二分查找法
c++·学习·算法
亚林瓜子3 小时前
Spring Boot 集成 ip2region 离线 IP 库实战指南
java·spring boot·后端·ip·ip2region
起个名字费劲死了3 小时前
基于灰度/形状的2D模板匹配
算法
杜 硕3 小时前
归并排序详解
数据结构·算法·排序算法
科技观察哨3 小时前
国产纳米定位平台与精密位移台量产能力图谱(2026):Z轴压电、XYθZ、六自由度并联与光刻/检测/装配选型指南
网络·人工智能·算法
盛世宏博智慧档案3 小时前
恒湿净化一体机联动开发:档案馆温湿度阈值判断与启停控制实践
java·后端·struts·恒湿机·加湿除湿消毒净化一体机
vipxieliang3 小时前
ValidX 应用于 HR系统员工信息验证:入职、离职、社保数据
java·spring boot·后端