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

yizhihongxing

首先要了解什么是插入排序,插入排序是排序算法中简单直观的一种,其原理是将未排序的元素一个一个插入到已经排好序的元素中,最终得到一个有序的序列。那么下面我将用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日

相关文章

  • Lua中写排序算法实例(选择排序算法)

    让我为您详细讲解一下Lua中写排序算法实例(选择排序算法)的完整攻略。 什么是选择排序算法 选择排序是一种简单直观的排序算法,它的工作原理如下: 在待排序的数组中找到最小元素; 将其存放到数组的起始位置; 在剩余未排序的元素中继续寻找最小值,并放到已排序序列的末尾; 重复步骤3,直到待排序序列中的所有元素均已排序完毕。 选择排序的实现思路简单,但由于每次都要…

    算法与数据结构 2023年5月19日
    00
  • java垃圾收集器与内存分配策略详解

    Java垃圾收集器与内存分配策略详解 什么是垃圾收集器? Java垃圾收集器是Java虚拟机(JVM)提供的一种内存管理机制,它用于回收不再被程序引用的对象以节省内存空间。垃圾收集器通过对程序进行监控,可以自动发现未被引用的对象并将其回收。Java中的垃圾收集器大致可以分为如下四种: Serial Parallel Concurrent Mark Sweep…

    算法与数据结构 2023年5月19日
    00
  • 详解高性能缓存Caffeine原理及实战

    详解高性能缓存Caffeine原理及实战 简介 Caffeine是一个基于Java的高性能缓存库,其目标是提供比ConcurrentHashMap更高效、更灵活的缓存方案。Caffeine支持多种缓存策略、过期机制以及可自定义的缓存加载策略等功能。本文将详细介绍Caffeine的原理、使用方法及实现实例。 Caffeine的原理 Caffeine的核心是一个…

    算法与数据结构 2023年5月19日
    00
  • C++中sort函数的基础入门使用教程

    以下是详细讲解“C++中sort函数的基础入门使用教程”的完整攻略及两条示例说明。 C++中sort函数的基础入门使用教程 简介 sort函数是C++ STL中的一个快速排序函数,我们可以用它对数组或容器进行排序。 基本使用 sort函数的一般形式如下: #include <algorithm> sort(first, last, cmp); 其…

    算法与数据结构 2023年5月19日
    00
  • 深入解析桶排序算法及Node.js上JavaScript的代码实现

    深入解析桶排序算法及Node.js上JavaScript的代码实现 桶排序算法介绍 桶排序算法是一种非常有效的排序方法,通常用于在已知数据范围的情况下对数据进行排序。桶排序将数据分配到一个或多个桶中,然后对每个桶中的数据进行排序,最后将所有桶中的数据依次合并即可得到有序的结果。 桶排序的时间复杂度为O(n),其中n为待排序的数据个数。如果数据范围较大,需要分…

    算法与数据结构 2023年5月19日
    00
  • PHP两种快速排序算法实例

    下面是对PHP两种快速排序算法实例的详细讲解: 1. 快速排序算法介绍 快速排序属于交换排序的一种,是目前应用最广泛的排序算法之一,也是学习算法的重要内容。快速排序算法的基本思想是通过将待排序序列进行划分,并不断递归对子序列进行排序,完成整个序列的排序。 快速排序的基本步骤如下: 选择一个基准值(pivot)。 将待排序数组中小于基准值的元素移动到数组左侧,…

    算法与数据结构 2023年5月19日
    00
  • STl中的排序算法详细解析

    STl中的排序算法详细解析 概述 在STL中,sort是一种常用的排序算法。sort算法旨在将元素从小到大排序,但也可以使用cmp函数指定排序方式。 算法实现 sort算法基于“快速排序”算法的实现。其基本思想是从待排序列中选取一定的数值作为划分元素(pivot),通过一趟排序将所有比该元素小的数放到它的左边,所有比该元素大的数放到它的右边,然后再对左右两个…

    算法与数据结构 2023年5月19日
    00
  • Java算法之重新排列数组例题

    下面是我对“Java算法之重新排列数组例题”的完整攻略: 题目描述 对于一个给定的整数数组,让其中的偶数放在奇数之前,保持它们原有的相对顺序不变。例如,对于数组[1,2,3,4],需要修改为[1,3,2,4]。 思路分析 对于这个问题,我们可以利用双指针的思路解决。定义两个指针left和right,分别指向数组的头部和尾部。当left指向的数为偶数并且它在r…

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