博客
关于我
Java常见排序算法之插入排序
阅读量:762 次
发布时间:2019-03-23

本文共 1553 字,大约阅读时间需要 5 分钟。

插入排序是一种经典的简单排序算法,它的工作原理与日常生活中的整理行为有着相似的逻辑。通过对待排序数组的逐步调整,插入排序能够有效地将数组按顺序排列。以下将详细介绍插入排序的原理、与选择排序的区别、Java代码实现以及适用场景。

插入排序的原理

插入排序的基本思想是从数组中逐个取出一个元素,并将其插入到已排序的前一部分中,直到整个数组被排序。具体步骤如下:

  • 初始化一个空数组或向真空中逐一将元素插入。
  • 每次从原数组中取出一个元素,将其插入到目标数组的适当位置(即插入位置)。
  • 重复上述过程直到原数组中的元素全部插入到目标数组中。
  • 以数组 [1, 3, 2, 4, 6] 为例:

    • 第一次取出 1,插入目标数组,目标数组为 [1]
    • 第二次取出 3,插入目标数组,目标数组为 [1, 3]
    • 第三次取出 2,插入目标数组:2 小于 3,插入位置变为 [1, 2, 3]
    • 第四次取出 4,插入目标数组:4 大于 3,插入位置变为 [1, 2, 3, 4]
    • 第五次取出 6,插入目标数组:6 大于 4,插入位置变为 [1, 2, 3, 4, 6]

    通过上述步骤,我们完成了对原始数组的插入排序。

    插入排序与选择排序的区别

    与选择排序相比,插入排序在处理已经部分排序的数组时效率更高。选择排序需要对整个数组中的元素进行多次比较,与当前位置的元素交换位置。而插入排序则是将元素逐一插入到已经排序好的数组中,时间复杂度因此也会相应降低。

    插入排序的Java代码实现

    以下是插入排序的Java代码示例:

    public class InsertSort {    public static void sort(int[] array) {        int length = array.length;        for (int i = 0; i < length; i++) {            int current = array[i];            int j = i - 1;            while (j >= 0 && current <= array[j]) {                array[j] = current;                current = array[j - 1];                j--;            }            array[j + 1] = current;        }    }    public static void main(String[] args) {        int[] array = {1, 3, 2, 4, 6};        sort(array);        for (int num : array) {            System.out.print(num + " ");        }        // 输出:1 2 3 4 6    }}

    插入排序的时间复杂度

    插入排序的时间复杂度取决于数组的初始状态:

  • 有序数组:时间复杂度为 O(n),因为每个元素仅需一次移位操作。
  • 无序数组:在最坏情况下,时间复杂度为 O(n^2),因为元素可能需要多次移动到其正确位置。
  • 这种复杂度特性使得插入排序在以下场景下表现优越:

  • 数组中元素的位置变化较小,例如数组 [2, 1, 3] 只需对 2 进行调整。
  • 数组已有部分排序,比如 [4, 5, 6, 1, 2, 3],其中 4、5、6 已经处于正确位置。
  • 数组中元素几乎处于正确位置,除了少数局部需要调整。
  • 通过以上分析,可以清晰地看到插入排序在具体应用场景中的优势。

    转载地址:http://tmxzk.baihongyu.com/

    你可能感兴趣的文章
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
    查看>>
    Parrot OS 6.3 发布!全面提升安全性,新增先进工具,带来更高性能
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34
    查看>>
    Spring Boot中的自定义事件详解与实战
    查看>>
    Passport 密码模式
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passport 简易搭配
    查看>>
    passwd命令限制用户密码到期时间
    查看>>
    Spring Boot 动态加载jar包,动态配置太强了!
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT (Basic Level) Practice 乙级1021-1030
    查看>>
    PAT (Basic Level) Practice 乙级1031-1040
    查看>>
    PAT (Basic Level) Practice 乙级1041-1045
    查看>>