当前位置: 首页 > news >正文

排序算法-插入排序

插入排序是一种简单直观的排序算法,其核心思想是将未排序部分的元素逐个插入到已排序部分的正确位置,类似于整理扑克牌。

插入排序步骤

  1. 初始化:将序列的第一个元素视为已排序部分,其余为未排序部分。

  2. 选择元素:从未排序部分取出第一个元素。

  3. 插入到正确位置:在已排序部分从后向前扫描,找到合适的位置插入该元素。

  4. 重复过程:重复上述步骤,直到未排序部分为空。

代码实现

package Sort;public class InsertionSort {public static void main(String[] args) {int[] res = getInsertionSort(new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48});for (int i = 0; i < res.length; i++) {System.out.print(res[i] + " ");}}public static int[] getInsertionSort(int[] nums){if (nums.length == 0) return nums;int currentNum;//当前待排序的数据,该元素之前的元素均已经排序过for (int i = 0; i < nums.length -1; i++) {int preIndex = i; //已被排序数据的索引currentNum = nums[preIndex + 1];//在已被排序过数据中倒序寻找合适的位置,如果当前待排序数据更小,就将num[preIndex]元素后移一位while (preIndex >= 0 && currentNum < nums[preIndex]){nums[preIndex + 1] = nums[preIndex];preIndex--;}//退出循环的时候,说明已经找到当前待排序数据的合适位置,将其插入nums[preIndex + 1] = currentNum;}return nums;}
}

时间复杂度

  1. 最坏情况:序列是逆序的,每次插入都需要移动所有已排序元素。

    • 比较和移动次数:1 + 2 + ... + (n-1) = n(n-1)/2,即 O(n²)

  2. 最好情况:序列已经有序,只需比较 n-1 次,无需移动,即 O(n)

  3. 平均情况:时间复杂度为 O(n²)

空间复杂度

  • 插入排序是原地排序,仅需常数级额外空间(如 key 变量),因此空间复杂度为 O(1)

http://www.xdnf.cn/news/352387.html

相关文章:

  • Linux快速入门
  • 排序算法-归并排序
  • 在线caj转换word
  • 安全核查基线-2.nfslock服务
  • 密码学--AES
  • 解密火星文:LeetCode 269 题详解与 Swift 实现
  • Uskin阵列式三轴力触觉传感器:驱动机器人智能的触觉数据专家
  • 达梦、PostgreSQL数据库讲json解析成临时表(json_table函数的使用)
  • HunyuanCustom, 腾讯混元开源的多模态定制视频生成框架
  • PostgreSQL 的 pg_advisory_lock 函数
  • 输入顶点坐标输出立方体长宽高的神经网络
  • Microsoft Azure DevOps针对Angular项目创建build版本的yaml
  • 【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解
  • 电机密集型工厂环境下的无线通信技术选型与优化策略
  • Azure资源创建与部署指南
  • 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
  • 嵌入式openharmony标准系统中GPIO口控制详解
  • rust-candle学习笔记11-实现一个简单的自注意力
  • 前端工程化和性能优化问题详解
  • Vue3 中 ref 与 reactive 的区别及底层原理详解
  • fakebook
  • 【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理
  • 在企业级项目中高效使用 Maven-mvnd
  • 2025-05-10-FFmepg库裁切有水印的视频
  • docker 日志暴露方案 (带权限 还 免费 版本)
  • 企业如何将钉钉付款单高效集成到金蝶云星空?
  • 高频微服务面试题总结
  • 【MySQL】联合查询
  • 自适应混合索引创建与管理:一种智能数据库优化机制的研究
  • 高并发内存池(二):项目的整体框架以及Thread_Cache的结构设计