图解Java中插入排序算法的原理与实现

 更新时间:2022年08月24日 09:21:07   作者:老周聊架构  
插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将通过图片详解插入排序的原理及实现,需要的可以参考一下

一、基本思想

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、算法分析

1、算法描述

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2~5。

2、过程分析

(1)、将第一个元素 (1) 标记为已经排序过。

(2)、提取第一个没有排序过的元素 (28)。

(3)、找出插入提取元素的地方;和已经排序过的元素 1 比较。

(4)、1 > 28 不成立(False), 在现有位置上插入一个元素。

(5)、找出插入提取元素的地方;和已经排序过的元素 28 比较。

(6)、28 > 3 成立(True), 则将现在已经排序过的元素({val1}) 向右移动1格。

(7)、找出插入提取元素的地方;和已经排序过的元素 1 比较。

(8)、1 > 3 不成立(False), 在现有位置上插入一个元素。

(9)、以此类推

三、算法实现

package com.algorithm.tenSortingAlgorithm;

import java.util.Arrays;

public class InsertionSort {
    private static void insertionSort(int[] arr) {
        int preIndex, current;
        for (int i = 1; i < arr.length; i++) {
            preIndex = i - 1;
            current = arr[i];
            while (preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex + 1] = arr[preIndex];
                preIndex--;
            }
            arr[preIndex + 1] = current;
        }
    }

    public static void main(String[] args) {
        int[] arr = {1,28,3,21,11,7,6,18};
        insertionSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

到此这篇关于图解Java中插入排序算法的原理与实现的文章就介绍到这了,更多相关Java插入排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中List根据条件删除元素的几种方式

    Java中List根据条件删除元素的几种方式

    java List删除指定元素有四种方法,分别是普通for循环,增强for循环,CopyOnWriteArrayList以及原生的Iterator迭代器循环来删除list中指定的某个元素,非常的简单,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-04-04
  • IDEA启动tomcat项目报错53820 socket closed问题及解决

    IDEA启动tomcat项目报错53820 socket closed问题及解决

    IDEA启动Tomcat项目时报错,原因是IDEA关闭时Tomcat未正常关闭,导致端口被占用,解决方法是通过任务管理器关闭占用高内存的Java进程,通常是IDEA进程下面的,或者使用命令行找到PID并强制终止进程
    2024-12-12
  • 使用Java后端操作Docker的详细教程

    使用Java后端操作Docker的详细教程

    Docker 是现代开发和部署流程中不可或缺的一部分,它简化了应用程序的环境配置、打包和分发,使得在不同机器上运行相同的应用变得更加轻松和一致,本文将详细介绍如何使用命令行工具(CMD)操控 Docker 来配置环境,需要的朋友可以参考下
    2025-02-02
  • 使用Spring动态修改bean属性的key

    使用Spring动态修改bean属性的key

    这篇文章主要介绍了使用Spring动态修改bean属性的key方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 深入解析kafka 架构原理

    深入解析kafka 架构原理

    Kafka使用领域非常广泛,在大数据时代kafka使用真香,LinkedIn、Microsoft和Netflix每天都用Kafka处理万亿级的信息。本文就让我们一起来大白话kafka的架构原理,感兴趣的朋友一起看看吧
    2021-11-11
  • 使用restTemplate远程调controller路径取数据

    使用restTemplate远程调controller路径取数据

    这篇文章主要介绍了使用restTemplate远程调controller路径取数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java中匿名内部类详解

    java中匿名内部类详解

    这篇文章主要对java中的匿名内部类的详细总结,需要的朋友可以参考下
    2017-04-04
  • Mybatis-plus配置分页插件返回统一结果集

    Mybatis-plus配置分页插件返回统一结果集

    本文主要介绍了Mybatis-plus配置分页插件返回统一结果集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • java实现收藏功能

    java实现收藏功能

    这篇文章主要为大家详细介绍了java实现收藏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java设计模式之代理模式原理及实现代码分享

    Java设计模式之代理模式原理及实现代码分享

    这篇文章主要介绍了Java设计模式之代理模式原理及实现代码分享,设计代理模式的定义,静态代理,动态代理,jdk动态代理实现步骤,原理及源码等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论