Java数据结构及算法实例:插入排序 Insertion Sort

Java数据结构及算法实例:插入排序 Insertion Sort

算法简介

插入排序是一种简单的排序算法,它的工作方式是每次将一个待排序的元素与前面已经排好序的元素逐个比较,并插入到合适的位置。插入排序的时间复杂度为O(n^2),是一种比较低效的排序算法。

算法实现

以下是使用Java语言实现插入排序算法的代码:

public static void insertionSort(int[] arr) {
    int len = arr.length;
    for (int i = 1; i < len; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

对于一个长度为n的数组,插入排序算法将会执行n-1次循环。每次循环都将一个待排序的元素插入到前面已经排好序的序列中。其中,内层的while循环会将待排序元素与前面的所有元素逐一比较,直到找到合适的位置。最后,该元素会被插入到正确的位置。

算法示例

以下是两个简单的例子来说明插入排序算法的过程:

示例1

对于数组arr=[3, 1, 5, 2, 4],使用插入排序算法进行排序的过程如下:

  1. 第1次循环,将1插入到合适的位置,序列变为[1, 3, 5, 2, 4]
  2. 第2次循环,将5插入到合适的位置,序列变为[1, 3, 5, 2, 4]
  3. 第3次循环,将2插入到合适的位置,序列变为[1, 2, 3, 5, 4]
  4. 第4次循环,将4插入到合适的位置,序列变为[1, 2, 3, 4, 5]

最终排序结果为[1, 2, 3, 4, 5]。

示例2

对于数组arr=[5, 4, 3, 2, 1],使用插入排序算法进行排序的过程如下:

  1. 第1次循环,将4插入到合适的位置,序列变为[4, 5, 3, 2, 1]
  2. 第2次循环,将3插入到合适的位置,序列变为[3, 4, 5, 2, 1]
  3. 第3次循环,将2插入到合适的位置,序列变为[2, 3, 4, 5, 1]
  4. 第4次循环,将1插入到合适的位置,序列变为[1, 2, 3, 4, 5]

最终排序结果为[1, 2, 3, 4, 5]。

总结

插入排序算法是一种简单且易于理解的排序算法,它的核心思想是将待排序元素插入到前面已经排好序的序列中。但是,插入排序算法的时间复杂度为O(n^2),对于大规模的数据排序来说效率较低。因此,在实际应用中需要根据数据规模和性能要求选择合适的排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构及算法实例:插入排序 Insertion Sort - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C语言数据结构 链表与归并排序实例详解

    C语言数据结构 链表与归并排序实例详解 链表介绍 链表是一种数据结构,它对于存储数据是动态而灵活的。它可以根据我们的需要动态的分配内存空间。链表是由先后相连的数据单元(结点)组成,每个结点都包含了下一结点的地址信息,最后一个结点的地址信息为NULL。链表按照操作方式可以分为单向链表、双向链表与循环链表等几种类型。 归并排序原理 归并排序是一种分治思想的算法,…

    数据结构 2023年5月16日
    00
  • C++ 数据结构之布隆过滤器

    C++ 数据结构之布隆过滤器 简介 布隆过滤器是一种用于快速判断一个元素是否存在于一个集合中的数据结构。它的空间效率和查询效率都比较高,在某些场景下,它可以代替传统的哈希表。 原理 布隆过滤器的基本原理是:将一个元素映射为多个位数组中的位置。在插入元素时,将这些位置上的值设置为1;在查询元素时,如果这些位置上的值都为1,则认为元素存在于集合中;否则认为元素不…

    数据结构 2023年5月17日
    00
  • C#常用数据结构之数组Array

    C#常用数据结构之数组Array 什么是数组 在C#中,数组是一种数据结构,它可以用于存储具有相同数据类型的多个元素。数组中的元素可以通过下标来访问,数组下标从0开始,最大下标为数组长度-1。 声明和初始化数组 声明数组 声明数组需要指定数据类型和数组名称,括号中指定数组的容量。例如,声明一个包含5个整数的数组: int[] arr = new int[5]…

    数据结构 2023年5月17日
    00
  • 基于python实现模拟数据结构模型

    实现一个模拟数据结构模型的过程需要考虑以下几个步骤: 确定数据结构类型,例如链表、栈、队列、二叉树等。 设计数据结构的具体实现方法,例如链表可采用节点、指针的方式实现,栈可以使用列表或数组实现,队列可使用循环队列实现等。 使用Python编写数据结构相关的类、方法、函数等,确保代码的可读性、灵活性和易维护性。 使用示例数据测试数据结构的各种操作,例如插入、删…

    数据结构 2023年5月17日
    00
  • 滑动窗口总结

    前言 滑动窗口是双指针的一种特例,可以称为左右指针,在任意时刻,只有一个指针运动,而另一个保持静止。滑动窗口路一般用于解决特定的序列中符合条件的连续的子序列的问题。 好处:时间复杂度 O(n^2) —> O(n) 一、算法应用场景 关键词: 1.满足XXX条件(计算结果、出现次数、同时包含) 2.最长/最短/或最值 3.子串/子数组/子序列 最最最…

    算法与数据结构 2023年4月17日
    00
  • C语言数据结构哈希表详解

    C语言数据结构哈希表详解 什么是哈希表? 哈希表(Hash Table)是一种采用散列函数(hash函数)将数据映射到一个固定长度的数组中,并且以 O(1) 的时间复杂度进行数据插入、查找、删除操作的数据结构。哈希表主要由以下三个组成部分构成:- 数组:用于存储映射到对应下标上的数据。- 散列函数:将数据映射到数组下标上的规则。- 冲突处理方式:当不同的数据…

    数据结构 2023年5月16日
    00
  • 手写 Vue3 响应式系统(核心就一个数据结构)

    下面是手写 Vue3 响应式系统的完整攻略。 1. 概述 Vue3 的响应式系统使用了 Proxy 对象来监测对象的变化,相较于 Vue2 的响应式系统使用 Object.defineProperty 进行数据劫持,Proxy 具有更好的性能和更简洁的 API。 当我们修改 Vue3 中的 reactive 对象内部的数据时,就会触发依赖收集和派发更新的操作…

    数据结构 2023年5月17日
    00
  • 带你了解Java数据结构和算法之递归

    带你了解Java数据结构和算法之递归 什么是递归? 递归是一种算法或计算机程序的设计方法,在程序执行过程中直接或间接的调用自身。 递归的实现方式 递归的实现通常使用函数进行的。在函数中,我们首先检查停止条件(递归基)是否满足,如果满足,我们停止递归;否则,我们调用自身递归进行下一步计算。 递归的应用场景 递归通常在解决问题中使用。对于像树、图等复杂结构的遍历…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部