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

Java算法之插入排序(Insertion Sort)

插入排序简介

插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。这个过程像打牌时整理手中的牌一样,逐步将数据排列成有序。

算法原理

插入排序的工作原理如下:

  1. 将第一元素视为已排序的序列。
  2. 从未排序序列中取第一个元素,从已排序序列的末尾开始比较。
  3. 比较如果已排序序列中的元素比待插入元素大,则将已排序序列的元素向后移动一位。
  4. 重复步骤3,直到找到已排序序列中第一个小于或等于待插入元素的位置。
  5. 将待插入元素插入到这个位置。
  6. 重复步骤2-5,直到所有未排序元素都被插入到已排序序列中。

代码实现

以下是使用Java实现插入排序的示例代码:

public class InsertionSort {
    public static void insertionSort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            // 记录当前待插入的元素
            int current = arr[i];
            int j = i - 1;

            // 从已排序序列中从后向前扫描
            while (j >= 0 && arr[j] > current) {
                // 将已排序序列中比当前元素大的元素向后移动
                arr[j + 1] = arr[j];
                j--;
            }
            // 将当前元素插入到正确的位置
            arr[j + 1] = current;
        }
    }

    public static void main(String[] args) {
        int[] arr = {9, 5, 1, 4, 3};
        insertionSort(arr);
        System.out.println("排序后的数组: ");
        for (int value : arr) {
            System.out.print(value + " ");
        }
    }
}

优缺点分析

优点

  • 简单性:算法原理简单,易于理解和实现。
  • 稳定性:插入排序是稳定的排序算法,相等的元素在排序后保持原有的顺序。
  • 空间效率:是原地排序算法,空间复杂度为O(1)。
  • 性能优势:对于部分有序的数据,插入排序的性能接近线性时间。

缺点

  • 时间复杂度:平均和最坏情况下的时间复杂度都是O(n^2),对于大规模数据集效率较低。
  • 不适合大数据量:对于大数据量,插入排序的性能不如其他更高级的排序算法。

使用场景

  • 小规模数据:当处理的数据量较小,且对性能要求不高时,插入排序是一个不错的选择。
  • 部分有序数据:如果已知数据已经部分有序,插入排序的性能会相对较好。
  • 教学目的:由于其简单性,插入排序常用于教学中,帮助初学者理解排序算法的基本概念。

结语

插入排序虽然在实际应用中的效率不如一些更高级的排序算法,但它的原理简单,易于实现,且对于部分有序的数据集表现良好


http://www.kler.cn/a/286121.html

相关文章:

  • 16:螺丝孔和MARK点布局
  • 好用的运动耳机品牌推荐?几款开放式蓝牙耳机推荐
  • 机器视觉-4 检测原理之OpenCV Blob特征检测
  • RAG中pdf解析的方法全览
  • [范文赏析 代码复盘]2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策
  • 信息安全--(五)物理与环境安全技术(一)物理安全概念
  • 逆向工程核心原理 Chapter22 | 恶意键盘记录器
  • iPhone 16 系列和多款新品将亮相,苹果发布会定档 9 月 10 日|TodayAI
  • Python在神经网络中优化激活函数选择使用详解
  • [Day 67] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • Qt中的各种“q+基本数据类型“
  • P1880 [NOI1995] 石子合并【模板】区间DP
  • 安全入门day.03
  • 排序算法之归并排序详细解读(附带Java代码解读)
  • 功能强大的开源数据中台系统 DataCap 2024.03.9 发布
  • 反向迭代器:reverse_iterator的实现
  • STM32(F103ZET6)第二十四课:IAP离线固件升级
  • 【微服务】限流、熔断和降级(持续更新中~)
  • 第十七篇——九变篇:紧扣战略重心,别跑题
  • Java中的事件驱动架构(EDA)