排序算法图解之Java插入排序

首先要了解什么是插入排序,插入排序是排序算法中简单直观的一种,其原理是将未排序的元素一个一个插入到已经排好序的元素中,最终得到一个有序的序列。那么下面我将用Java代码来演示插入排序的实现过程,并且提供详细的注释帮助读者理解。

算法步骤

  1. 从第一个元素开始,认为第一个元素是已经排好序的,取第二个元素和已排序的元素进行比较,如果第二个元素比已排序的元素小,则交换两个元素,否则将第二个元素插入到已排序的元素中,此时第二个元素成为已排序的元素。
  2. 然后取第三个元素,重复上述操作,将第三个元素插入到已排序的元素中。
  3. 以此类推,直到所有元素都被排序。

Java实现

public class InsertionSort {

    public static void main(String[] args) {
        int[] arr = new int[]{5, 3, 8, 6, 4};
        insertionSort(arr);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void insertionSort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; ++i) {
            int key = arr[i];
            int j = i - 1;

            // 将元素插入到已排序的元素中
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }
}

在代码中,我们定义了一个函数insertionSort来实现插入排序。在该函数中,我们首先获取数组的长度,然后从第二个元素开始遍历数组。对于每一个未排序的元素,我们都将其插入到已排序的元素中。具体实现是,将未排序的元素保存在一个变量key中,然后从该元素的前一个元素开始向前遍历已排序的元素,如果已排序的元素大于key,则将元素向后移动一位,直到找到key的正确位置为止。然后将key插入到该位置中。最终实现了数组的排序。

示例说明

示例一:假设我们需要将[5,3,8,6,4]进行升序排序

  1. 首先,将第二个元素3和第一个元素5进行比较,3比5小,因此将3插入已排序的元素5中,此时数组为[3,5,8,6,4]

  2. 接着,将第三个元素8和已排序的元素[3,5]进行比较,8比5大,因此8不需要移动,此时数组为[3,5,8,6,4]

  3. 然后,将第四个元素6和已排序的元素[3,5,8]进行比较,6比8小,在85中间插入6,此时数组为[3,5,6,8,4]

  4. 最后,将第五个元素4和已排序的元素[3,5,6,8]进行比较,4比8小,在86之间插入4,此时数组为[3,5,4,6,8]

  5. 经过4轮比较插入排序后,最终数组为[3,4,5,6,8],完成了排序。

示例二:假设我们需要将[1,2,3,4,5]进行升序排序

  1. 首先,将第二个元素2和第一个元素1进行比较,2比1大,因此2不需要移动,此时数组为[1,2,3,4,5]

  2. 接着,将第三个元素3和已排序的元素[1,2]进行比较,3比2大,因此3不需要移动,此时数组为[1,2,3,4,5]

  3. 然后,将第四个元素4和已排序的元素[1,2,3]进行比较,4比3大,因此4不需要移动,此时数组为[1,2,3,4,5]

  4. 最后,将第五个元素5和已排序的元素[1,2,3,4]进行比较,5比4大,因此5不需要移动,此时数组为[1,2,3,4,5]

  5. 最终排序结果为[1,2,3,4,5],数组不需要移动,已经是有序的了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:排序算法图解之Java插入排序 - Python技术站

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

相关文章

  • JS实现常见的查找、排序、去重算法示例

    JS实现常见的查找、排序、去重算法示例 在 JavaScript 中,常见的算法题目也非常多,其中最常见的算法大致可以分为三类,即查找、排序和去重。在这里将对这三个方面中比较常用的算法进行一一解析,以期能够帮助大家更好的理解和掌握这些算法的使用。 一、查找 1. 二分查找 在排序好的数组中查找一个值,如何快速地找到这个值呢?这时候可以使用二分查找算法。它的原…

    算法与数据结构 2023年5月19日
    00
  • Go归并排序算法的实现方法

    Go归并排序算法的实现方法 简介 归并排序(Merge Sort)是一种经典的分治算法,它将一个大问题分解为若干个小问题,通过递归将小问题排好序,最后再将小问题合并起来,得到排序的结果。 归并排序的最坏时间复杂度为$ O(nlogn)$,且具有稳定性,是较为优秀的排序算法之一。 实现方法 归并排序的实现分为两个步骤,分别是分解和合并: 分解 分解过程需要递归…

    算法与数据结构 2023年5月19日
    00
  • 排序算法之PHP版快速排序、冒泡排序

    排序算法之PHP版快速排序、冒泡排序 在算法和数据结构中,排序是一种重要的操作,主要目的是将一组无序的数据按照一定的规则进行排序。常见的排序算法有冒泡排序、快速排序、归并排序等。本文将详细介绍php版本的快速排序和冒泡排序的实现。 冒泡排序 冒泡排序是一种最简单的排序算法之一。其思想是从数组的第一个元素开始比较,将大的元素交换到后面,依次比较下去,直到排序完…

    算法与数据结构 2023年5月19日
    00
  • 利用explain排查分析慢sql的实战案例

    对于利用explain排查分析慢SQL的实战案例,可以按照以下步骤进行。 1. 获取慢SQL 首先要获取慢SQL,即执行时间较长的SQL语句。可以在MySQL的慢查询日志中查看,也可以使用一些监控工具进行查看。获取慢SQL之后,可以通过一些工具进行格式化,让其更加可读。 2. 使用explain解析SQL 在获取慢SQL之后,接下来就是使用explain对S…

    算法与数据结构 2023年5月19日
    00
  • 简单掌握桶排序算法及C++版的代码实现

    简单掌握桶排序算法及C++版的代码实现 什么是桶排序? 桶排序(Bucket Sort)是一种常见的排序算法,它将数组中的元素分组至有限数量的桶中。每一个桶都可以视为一小部分数据的集合。根据桶内的元素所构成的数据的大小关系,可以在每个桶内部再分别使用其他排序算法或者递归地进行桶排序。最后,所有的桶按照顺序依次输出,即可得到有序序列。 桶排序算法的时间复杂度 …

    算法与数据结构 2023年5月19日
    00
  • 合并排序(C语言实现)

    合并排序(C语言实现) 合并排序是一种将待排序序列分成多个子序列,分别进行排序,然后再将排序后的子序列合并成整体有序序列的排序算法。使用递归实现时,该算法的时间复杂度为O(nlogn),因此被广泛应用。 实现步骤 合并排序可以用以下步骤来实现: 分治:将待排序序列从中间分成两部分,递归地对左右两部分进行排序。 合并:将两个有序子序列合并成一个有序序列。 在实…

    算法与数据结构 2023年5月19日
    00
  • C#实现希尔排序

    C#实现希尔排序攻略 简介 希尔排序(Shell Sort)是插入排序的一种改进版本,也称为缩小增量排序(Diminishing Increment Sorting)。希尔排序首先将要排序的序列分成若干个子序列,分别进行插入排序,待子序列基本有序时,再对全体记录进行一次直接插入排序。其算法主要思想是将原序列按一定间隔分为若干子序列,对每个子序列分别进行插入排…

    算法与数据结构 2023年5月19日
    00
  • asp下几种常用排序算法

    我将为您详细讲解ASP下几种常用排序算法的完整攻略。 一、排序算法简介 排序算法是计算机科学中非常基础的算法之一。它是将一组数据中的元素按照某种规则进行排序的过程。排序算法是计算机程序设计的基础,它涉及到数据结构、算法、模式识别等计算机科学领域内的基础理论。 排序算法主要分为以下几种: 冒泡排序 选择排序 插入排序 快速排序 归并排序 本文将针对ASP下几种…

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