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

Java 插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是插入排序的Java实现:

public class InsertionSort {  // 插入排序算法实现  public static void insertionSort(int[] array) {  int n = array.length;  for (int i = 1; i < n; ++i) {  int key = array[i];  int j = i - 1;  // 将array[i]插入到已排序部分array[0..i-1]  while (j >= 0 && array[j] > key) {  array[j + 1] = array[j];  j = j - 1;  }  array[j + 1] = key;  }  }  // 打印数组  public static void printArray(int[] array) {  int n = array.length;  for (int i = 0; i < n; ++i) {  System.out.print(array[i] + " ");  }  System.out.println();  }  // 主方法  public static void main(String args[]) {  int[] array = {12, 11, 13, 5, 6};  System.out.println("排序前的数组:");  printArray(array);  insertionSort(array);  System.out.println("排序后的数组:");  printArray(array);  }  
}

代码解释

  1. 插入排序方法 insertionSort(int[] array):
    • n 表示数组的长度。
    • 外层循环 for (int i = 1; i < n; ++i) 遍历数组中的每一个元素,从第二个元素开始(假设第一个元素是已排序的)。
    • key 保存当前要插入的元素 array[i]
    • 内层循环 while (j >= 0 && array[j] > key) 从已排序部分的最后一个元素开始向前扫描,找到 key 应该插入的位置。
    • 如果已排序部分的元素大于 key,则将其向后移动一个位置。
    • 最后,将 key 插入到正确的位置 array[j + 1]
  2. 打印数组方法 printArray(int[] array):
    • 遍历数组并打印每一个元素。
  3. 主方法 main(String args[]):
    • 创建一个示例数组。
    • 打印排序前的数组。
    • 调用 insertionSort 方法对数组进行排序。
    • 打印排序后的数组。

复杂度分析

  • 时间复杂度:
    • 平均和最坏情况:O(n^2),其中 n 是数组的长度。
    • 最好情况:O(n),当数组已经是有序的时候。
  • 空间复杂度: O(1),因为排序是原地进行的,不需要额外的存储空间。

插入排序对于小规模数据或部分有序的数据表现良好,但在处理大规模数据时效率较低。

http://www.lryc.cn/news/455736.html

相关文章:

  • 随机掉落的项目足迹:Vue3中vite.config.ts配置代理服务器解决跨域问题
  • C++笔记之标准库和boost库中bind占位符_1的写法差异
  • 二分查找
  • 关注、取关、Redis实现共同关注、 博客推送与分页查询
  • 专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法
  • 胤娲科技:AI重塑会议——灵动未来,会议新纪元
  • Python画笔案例-080 绘制 颜色亮度测试
  • MATLAB工具库:数据统计分析工具MvCAT、MhAST等
  • 角色动画——RootMotion全解
  • 加密软件的桌面管理系统有什么?
  • 【stm32】寄存器(stm32技术手册下载链接)
  • django的路由分发
  • 《贪吃蛇小游戏 1.0》源码
  • 初入网络学习第一篇
  • (项目管理系列课程)项目规划阶段:项目范围管理-收集需求
  • SQl注入文件上传及sqli-labs第七关less-7
  • 想成为月薪过万的软件测试工程师?快看过来!
  • 找生网站方案———未来之窗行业应用跨平台架构
  • 全网都在找的Python生成器竟然在这里!简单几步,让你的代码更简洁、更高效!
  • 插入排序,希尔排序,和归并排序
  • Prompt 模版解析:诗人角色的创意引导与实践
  • zookeeper选举kafka集群的controller
  • 吉如一线段树:区间最值和历史最值
  • 数据库常见的安全特性有哪些
  • Debezium日常分享系列之:Debezium 3.0.0.Final发布
  • MVCC(多版本并发控制)
  • 低代码可视化-uniapp响应式数据data-代码生成器
  • 10.7学习
  • 基础算法之前缀和--Java实现(下)--LeetCode题解:-和为 K 的子数组 - 和可被 K 整除的子数组 -连续数组-矩阵区域和
  • 序列化与反序列化基础及反序列化漏洞(附案例)