博客
关于我
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/

    你可能感兴趣的文章
    nginx代理地图服务--离线部署地图服务(地图数据篇.4)
    查看>>
    Nginx代理外网映射
    查看>>
    Nginx代理模式下 log-format 获取客户端真实IP
    查看>>
    Nginx代理解决跨域问题(导致图片只能预览不能下载)
    查看>>
    Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
    查看>>
    Nginx代理配置详解
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    nginx优化日志拒绝特定404请求写入
    查看>>
    Nginx优化解析
    查看>>
    Nginx使用proxy_cache指令设置反向代理缓存静态资源
    查看>>
    Nginx做反向代理时访问端口被自动去除
    查看>>
    Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例
    查看>>
    Nginx入门简介和反向代理、负载均衡、动静分离理解
    查看>>
    nginx入门篇----nginx服务器基础配置
    查看>>
    vue中参数传不到后台去怎么办?
    查看>>
    nginx反向代理
    查看>>
    Nginx反向代理
    查看>>
    nginx反向代理、文件批量改名及统计ip访问量等精髓总结
    查看>>
    Nginx反向代理与正向代理配置
    查看>>