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日

相关文章

  • java数据结构实现顺序表示例

    如果想要实现一种数据结构,我们首先需要考虑它的存储结构。对于顺序存储结构,Java中的数组是一个很好的选择。下面就为大家分享关于Java数据结构实现顺序表示例的完整攻略,帮助读者更好地理解该数据结构的实现方式。 1. 定义一个顺序表数组 首先,我们需要定义一个数组类型的顺序表。这个顺序表可以使用泛型来表示各种类型的数据: public class MyArr…

    数据结构 2023年5月17日
    00
  • 数据结构与算法之手撕排序算法

    数据结构与算法之手撕排序算法 本篇攻略介绍如何手撕常见的排序算法。 冒泡排序 冒泡排序是一种通过不断交换相邻元素来排序的方法。它的时间复杂度为$O(n^2)$。 def bubble_sort(nums): for i in range(len(nums)): for j in range(len(nums)-i-1): if nums[j] > nu…

    数据结构 2023年5月17日
    00
  • JavaScript数据结构与算法

    JavaScript数据结构与算法完整攻略 什么是数据结构与算法 数据结构和算法是计算机科学的重要组成部分,常用于解决数据处理问题的方法与技术。数据结构是指存储和组织数据的方式,而算法则是解决数据处理问题的途径和方法。 数据结构分类 数据结构可分为以下几类: 数组 —— 存储有序元素集合的线性结构; 栈 —— 一种后进先出的数据结构; 队列 —— 一种先进先…

    数据结构 2023年5月17日
    00
  • C语言数据结构树的双亲表示法实例详解

    C语言数据结构树的双亲表示法实例详解 什么是双亲表示法 在树上,每个节点都有且仅有一个父节点(根节点除外)。对于一个树结构,我们可以使用许多方法来表示这个树,其中最常见的一种方法是双亲表示法。该表示法使用一个一维数组来存储树的节点,数组的下标即为该节点的编号,数组的值则表示该节点的父节点编号。 当一个节点没有父节点时,该节点即为根节点。 双亲表示法的优缺点 …

    数据结构 2023年5月17日
    00
  • Java数据结构之基于比较的排序算法基本原理及具体实现

    Java数据结构之基于比较的排序算法基本原理及具体实现 前言 排序算法是计算机科学中最基本的算法之一,其广泛应用于各领域中。基于比较的排序算法是一种流行的排序算法类型,本篇文章将阐述其基本原理及具体实现,以帮助读者深入了解该算法。 算法介绍 基于比较的排序算法是根据元素之间的比较操作来完成排序的一种算法类型,它可以对各种数据类型进行排序,如整数、浮点数、字符…

    数据结构 2023年5月17日
    00
  • C++ 数据结构超详细讲解单链表

    C++ 数据结构超详细讲解单链表 什么是单链表 单链表是一种常见的线性数据结构,它由若干个节点组成,每个节点包含两部分内容:数据域和指针域。其中数据域存储节点所携带的数据,而指针域存储下一个节点的地址。 单链表的性质在于每个节点只有一个指针域,而第一个节点叫做头节点,通常不存放数据,只用来标注链表的起始位置。最后一个节点的指针域指向 NULL,即表示链表的结…

    数据结构 2023年5月17日
    00
  • redis中hash数据结构及说明

    Redis中Hash数据结构及说明 简介 Redis中的Hash是一个string类型的field和value的映射表,可以将多个键值对存储在一个数据结构中,适合于存储对象。 通过HASH数据结构,我们可以方便的对单个field进行增删改查操作,增加了程序编写的方便性。 命令 以下是Hash数据结构的基础命令: HSET 将哈希表 key 中的域 field…

    数据结构 2023年5月17日
    00
  • Lua教程(七):数据结构详解

    Lua教程(七):数据结构详解 Lua 中的数据结构广泛应用于各种计算机程序中。本文将详细介绍 Lua 中的数组、列表、栈、队列、集合和字典等数据结构的使用以及相关的函数。 数组 数组是存储在连续内存位置上的相同数据类型的元素集合。Lua 中的数组索引默认从 1 开始。下面是一些常用的 Lua 数组函数: table.concat(arr[, sep[, i…

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