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

yizhihongxing

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语言详解数据结构与算法中枚举和模拟及排序”的完整攻略。 纲要 本文的主要内容包括: 枚举的概念及应用 模拟的概念及应用 排序的概念及分类 枚举的概念及应用 枚举是一种数据类型,可以将一组具有相关性质的常量定义为枚举常量。枚举常量默认是按照自然数递增的顺序进行编号的。枚举常量可以用于表示状态、类型、结果等概念。以下是一个枚举类型的定义:…

    数据结构 2023年5月17日
    00
  • C语言数据结构之动态分配实现串

    C语言数据结构之动态分配实现串 序言 在本文中,我们将探讨C语言中动态分配实现串的方法和技巧。本文将会从什么是动态分配串开始,详细介绍如何实现动态分配串,并给出一些示例代码帮助读者更好地理解。 什么是动态分配串 一个串(string)是由零个或多个字符组成的有限序列。串的实现可以分为两种形式:静态分配和动态分配。动态分配串是指在运行时动态地分配内存,以适应不…

    数据结构 2023年5月17日
    00
  • 栈(Stack)

    概述 栈就是一种 只允许在表尾进行插入和删除操作 的 线性表 栈的特点 先进后出 ,在表尾进行插入和删除操作 数组实现栈 crown crown:使用bottom来确定栈顶所在数组的下标,默认为 -1 空栈 当空栈时 ,crown = -1 栈是否为空 当 crown = -1 时 ,栈为空 ,不能 遍历 ,出栈 , 获取栈顶元素 栈是否已满 当 crown…

    算法与数据结构 2023年4月19日
    00
  • C++中的数组、链表与哈希表

    C++中的数组、链表与哈希表 数组 数组是一种数据结构,它存储的是一组相同类型的值。数组中每个元素的类型都是相同的,而且数组中的元素是按照一定的顺序排列的。C++中的数组是有序的,并且可以通过下标来访问数组中的元素。 数组的定义和初始化 在C++中定义数组的语法如下: type arr_name[arr_size]; 其中,type表示数组元素的类型,arr…

    数据结构 2023年5月17日
    00
  • 浅谈iOS 数据结构之链表

    浅谈iOS 数据结构之链表 在计算机科学中,链表是一种数据结构,用于存储一系列按顺序排列的元素。链表的一个关键点是它不需要连续的内存空间来存储元素,相反,每个元素由一个指向下一个元素的指针组成。在iOS开发中,链表在各种场景下都有所应用,如UITableView和UICollectionView的数据源等。本文将详细讲解链表的基本知识和使用技巧。 链表的基本…

    数据结构 2023年5月17日
    00
  • 排序算法之详解冒泡排序

    引入 冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。 虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。 思路 一组无序的数组,要求我们从小到大排列 我们可以先将最大的元素放在数组末尾 再将第二大的数放在数组的倒数第二个位置 再将第三大的数放在数组的倒数第三个位置 以此类推 那么现在问题的关键就是如何将 第 n 大的数 放在 …

    算法与数据结构 2023年4月25日
    00
  • Java数据结构顺序表的详细讲解

    Java数据结构顺序表的详细讲解 什么是顺序表? 顺序表是一种线性结构,它通过一段连续的存储空间来存储一组元素,每个元素占用一个固定大小的存储单元,元素之间按照一定的顺序紧密排列。 顺序表的实现 在Java中,顺序表可以通过数组实现。数组是一种非常基础的数据结构,它可以用来存储相同类型的数据,数组元素的地址是连续的,因此可以通过下标访问数组中的元素。 实现步…

    数据结构 2023年5月17日
    00
  • Java数据结构之堆(优先队列)详解

    Java数据结构之堆(优先队列)详解 概述 堆是一种基于树的数据结构,它可以用来解决很多问题,例如排序、优先队列等。在堆中,每个节点的值都小于或等于它的子节点的值。堆分为两种类型:最大堆和最小堆。在最大堆中,根节点的值最大;而在最小堆中,根节点的值最小。 堆的操作主要有以下两种: 插入:将一个元素插入到堆中,需要维护堆的性质,即节点的值小于或等于子节点的值。…

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