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

    你可能感兴趣的文章
    php机器人聊天对话框,基于AIML的PHP聊天机器人
    查看>>
    PHP查找数组中最大值与最小值
    查看>>
    php查最大值,在PHP数组中查找最大值
    查看>>
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>
    php根据年月日计算年龄
    查看>>
    RabbitMQ - 单机部署(超详细)
    查看>>
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式模式
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
    查看>>
    RabbitMQ + JMeter组合,优化你的中间件处理方式!
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>