插入排序(Java实例代码)

news2024/10/7 20:25:07

目录

 

插入排序

一、概念及其介绍

二、适用说明

三、过程图示

四、Java 实例代码

InsertionSort.java 文件代码:


 

插入排序

一、概念及其介绍

插入排序(InsertionSort),一般也被称为直接插入排序。

对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表

。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

二、适用说明

插入排序的平均时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1),具体时间复杂度和数组的有序性也是有关联的。

插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较 N-1 次,时间复杂度为 O(N)。最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是 O(n^2)。

三、过程图示

假设前面 n-1(其中 n>=2)个数已经是排好顺序的,现将第 n 个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。

按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。

从小到大的插入排序整个过程如图示:

第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。

 

e803c7c648cbcfd71ea7514d4b6fb6b6.png

第二轮:第三位置的 9 比前一位置的 7 大,无需交换位置。

 

c6168bcdf491a864cb4c448ac3f11c04.png

第三轮:第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。

 

bdaefac0b527b49d948eca712770a491.png

第四轮:第五位置的 1 比前一位置的 9 小,交换位置,再依次往前比较。

 

b0981cdb3a20bc1c9b140ae0706505d1.png

......

就这样依次比较到最后一个元素。

四、Java 实例代码

源码包下载:Downloadhttps://www.runoob.com/wp-content/uploads/2020/09/runoob-algorithm.zip

部分代码:

InsertionSort.java 文件代码:

package runoob;

/**
 * 插入排序
 */
public class InsertionSort {
    //核心代码---开始
    public static void sort(Comparable[] arr){

        int n = arr.length;
        for (int i = 0; i < n; i++) {
            // 寻找元素 arr[i] 合适的插入位置
           for( int j = i ; j > 0 ; j -- )
                if( arr[j].compareTo( arr[j-1] ) < 0 )
                    swap( arr, j , j-1 );
                else
                    break;
        }
    }
    //核心代码---结束
    private static void swap(Object[] arr, int i, int j) {
        Object t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

    public static void main(String[] args) {

        int N = 20000;
        Integer[] arr = SortTestHelper.generateRandomArray(N, 0, 100000);
        InsertionSort.sort(arr);
        for( int i = 0 ; i < arr.length ; i ++ ){
            System.out.print(arr[i]);
            System.out.print(' ');
        }
    }

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/870603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unreal View Model结合GAS使用

这个东西真的难用&#xff0c;各种问题&#xff0c;记录下 官方文档 bilibili教学 开启插件 插件开启 Viewmodel&#xff1a; build.cs内PublicDependencyModuleNames加上ModelViewViewModel 创建ViewModel类 #pragma once#include "CoreMinimal.h" #include &quo…

Python版本Open3D基本使用

最近想完成一个点云进行三维旋转展示的效果,从网上找到可以通过Open3D进行实现。参考链接为:如何将点云文件制作成旋转的GIF图(Open3D) 因此想参考上述过程实现一下,在操作的过程中遇到了一系列的问题,在此记录。 1)博主安装了Pycharm作为编译器,使用学生身份认证,获取…

Android FrameWork 层 Handler源码解析

Handler生产者-消费者模型 在android开发中&#xff0c;经常会在子线程中进行一些耗时操作&#xff0c;当操作完毕后会通过handler发送一些数据给主线程&#xff0c;通知主线程做相应的操作。 其中&#xff1a;子线程、handler、主线程&#xff0c;其实构成了线程模型中经典的…

docker搭建LNMP

docker安装 略 下载镜像 nginx:最新版php-fpm:根据自己需求而定mysql:根据自己需求定 以下是我搭建LNMP使用的镜像版本 rootVM-12-16-ubuntu:/docker/lnmp/php/etc# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验六 静态数码管显示

目录 前言 一、原理图及知识点介绍 1.1、数码管原理图&#xff1a; 二、代码分析 前言 第一个实验&#xff1a; 51单片机&#xff08;普中HC6800-EM3 V3.0&#xff09;实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验&#xff1a;51单片机&am…

【踩坑】最新亲测能用!修复MacOS安装软件时提示“应该移到废纸篓”并且无法打开软件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 网上方法的尝试 方法一&#xff1a;xattr 方法二&#xff1a;UPX 真的能用的方法 GateKeeper_Helper.command的内容 网上方法的尝试 方法一&#xff1a;xattr 以前的Mac版本可以通过以下方式来解开限…

从ChatGLM2-6B来看大模型扩展上下文和加速推理相关技术

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初代模型的开发经验&#xff0c;全面…

【深入探索Docker】:开启容器化时代的技术奇迹

深入探索Docker 深入探索Docker&#xff1a;开启容器化时代的技术奇迹前言1. 容器化&#xff1a;实现快速部署和可移植性2. 虚拟化&#xff1a;提高安全性和可靠性3. 映像&#xff1a;打包应用及依赖项的模板4. 网络管理&#xff1a;连接容器和主机5. 持久化数据&#xff1a;保…

Linux 终端命令之文件浏览(3) less

Linux 文件浏览命令 cat, more, less, head, tail&#xff0c;此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…

多个 el-select 下拉框调用同一个数组时,下拉框的值不能重复

实现的效果 多个下拉框&#xff0c;每个下拉框选中的值不能重复&#xff0c;选过的下拉值会被过滤 共用一个接口 realUserList , 里面是部门的人 四个下拉框必选&#xff0c;数据结构如下 我使用的方法是计算属性完成, 我是从vuex 里面的获取的数据( alreaySelectUser ), …

Linux MQTT智能家居(温度,湿度,环境监测,摄像头等界面布局设置)

文章目录 前言一、温度湿度曲线布局二、环境监测界面布局三、摄像头界面布局总结 前言 本篇文章来完成另外三个界面的布局设置。 这里会使用到 feiyangqingyun的一些控件库。 一、温度湿度曲线布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

Maven 基础学习及使用

Maven1 Maven简介1.1 Maven模型1.2 仓库 2 Maven安装配置3 Maven基本使用3.1 Maven 常用命令3.2 Maven 生命周期 4 IDEA使用Maven4.1 IDEA配置Maven环境4.2 Maven 坐标详解4.3 IDEA 创建 Maven项目4.4 IDEA 导入 Maven项目 5 依赖管理5.1 使用坐标引入jar包5.2 依赖范围 Maven …

UVA-1601 万圣节后的早晨 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 以三个点的当前位置作为状态&#xff0c;广度优先遍历&#xff0c;找到终点即为最短次数。 注意&#xff1a; 一次可以移动多个点&#xff0c;但是每个点只能移动一步。在同一次中&#xf…

人工智能监听——研究人员发现新的安全威胁

大学的一项新研究表明&#xff0c;人工智能 (AI) 可以通过按键声音识别密码&#xff0c;准确率超过 90%。 在通过 Zoom 等视频通话聊天时输入计算机密码可能会打开网络攻击的大门&#xff0c;一项新的研究表明&#xff0c;人工智能可以通过窃听打字声音来找出正在按下的按键。…

索引堆及其优化(Java 实例代码)

目录 索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 四、Java 实例代码 src/runoob/heap/IndexMaxHeap.java 文件代码&#xff1a; 索引堆及其优化 一、概念及其介绍 索引堆是对堆这个数据结构的优化。 索引堆使用了一个新的 int 类型的数组&#xff0c;…

JavaScript【BOM】

【BOM】 原创内容&#xff0c;转载请注明出处&#xff01; 一、BOM是什么 BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;是 JS 与 浏览器窗口交互的接口。 一些与浏览器改变尺寸、滚动条滚动相关的特效&#xff0c;都要借助 BOM 技术。 二、w…

Arduino+esp32学习笔记

学习目标&#xff1a; 使用Arduino配置好蓝牙或者wifi模块 学习使用python配置好蓝牙或者wifi模块 学习内容&#xff08;笔记&#xff09;&#xff1a; 一、 Arduino语法基础 Arduino语法是基于C的语法,C又是c基础上增加了面向对象思想等进阶语言。那就只记录没见过的。 单多…

【分布式】Viewstamped Replication Revisited

篇前感悟&#xff1a; 阅读分布式系统文章的意义其实并不在于你个人真正地去开发这样一个基于这种协议的系统&#xff0c;因为真正去开发一个高可用的分布式系统实在是太难了&#xff08;对我来说…&#xff09;更多的还是汲取其中的思想&#xff0c;包括设计思路&#xff0c;优…

高性能跨平台网络通信框架 HP-Socket v5.9.3

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4478351216.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v5.9.3 更新 一、主要更新 问题修复&#xff1a;通过 POST/PUT 等带有请求内容的 HTTP 方…

Vue主面板组件模板(简洁版)

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;源码如下&#xff1a; &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以介绍【&#x1f380;主面板组件模板&#xf…