[JAVA]直接插入排序

news2024/11/24 18:28:10

        插入排序就像玩扑克牌一样,把元素按照大小插入到一个已经排好序的序列中,直到全部元素排好。

        假设我们拿到了一个数组,请问我们该从哪一个元素开始着手于直接插入排序呢?

        答案是:第二个元素

        我们可以假设,第一步,第一个单个元素即为一个已经排好序的序列,再拿第二个元素安插到序列中。第二步,拿到第三个元素,此时前两个元素以及有序,我们可以将第三个元素依照大小放入前面的序列中。以此类推

演示:

        第一步,是找到有序序列,以及需要插入的元素。

        我们以需要插入的元素为i下标,有序序列的最后一个元素为j下标。

         第二步,是比较插入元素和有序序列中元素的大小关系。

        在比较之前,需要先把插入元素提前存放避免被覆盖。

        需要得到的序列为升序序列,则有序序列中的元素比插入元素较大时,把有序序列中的元素往右移动一位,直到找到一个比插入元素小或j(j用来遍历有序序列)下标达到了0下标的位置。

        需要得到降序序列,就是在前面的有序序列中找到比插入元素大的元素的右一个位置插入。

         第三步,移动i下标的位置寻找下一位插入元素,再重复循环第二步直到遍历完数组。

 

为了节省时间,后面就不画啦,相信大家都能看懂了。

上代码。

import java.util.Arrays;

public class Test {
    public static void insertSort(int[] array){
        for(int i = 1; i < array.length; i++){
            int tmp = array[i];//存放好插入元素
            int j = i - 1;
            for(; j >= 0; j--){
                if(array[j] > tmp){//如果插入元素小于有序序列中的元素
                    array[j+1] = array[j];//则j下标的元素往右移动一位
                }else{
                    break;//如果大于或等于,则证明tmp元素比j下标的元素大,可以安插到j+1位置
                    //且之前的序列都是有序的,记住我们前面的序列一直是一个有序序列
                }
            }
            array[j+1] = tmp;
        }
    }

    public static void main(String[] args) {
        int[] array = {12,89,2,4,61,50};
        insertSort(array);
        System.out.println(Arrays.toString(array));
    }
}

 

 

 

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

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

相关文章

微服务测试如何测试?

本文将讨论微服务测试的重要性、挑战和最佳实践。 微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中&#xff0c;大型应用程序被分成较小的、独立的服务&#xff0c;这些服务通过网络相互通信。微服务测试是确保这些服务无缝协同工作的关键步骤。本文将…

《微服务实战》 第五章 Spring Cloud Netflix 之 Ribbon

前言 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具&#xff0c;其主要功能是提供客户端的负载均衡算法和服务调用。 1、负载均衡 负载均衡&#xff08;Load Balance&#xff09; &#xff0c;简单点说就是将用户的请求平摊分配到多个…

【论文阅读19】GloVe: Global Vectors for Word Representation

论文十问十答&#xff1a; Q1论文试图解决什么问题&#xff1f; Q2这是否是一个新的问题&#xff1f; Q3这篇文章要验证一个什么科学假设&#xff1f; Q4有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课题在领域内值得关注的研究员&#xff1f; Q5论文中提到的解决方…

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/0 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 (DCE) 10.1.1.2 255.255.255.252 不适用 不适用 R2 G0/0 192.168.2.1 255.…

Oracle数据库安装教程,并实现公网远程连接

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

黑客的真实生活是怎样的?他们真的能挣很多钱么?

作者&#xff1a;l浪费的时间 黑客这一群体&#xff0c;在普通人眼中就是神一般的存在。 黑客差钱吗&#xff1f;他们不差钱。当然是靠装逼活着&#xff0c;很多黑客只想钻研技术攻破个大公司玩玩&#xff0c;搞得轰轰烈烈&#xff0c;就能吹一辈子牛了。 一、黑客靠什么赚钱…

Nginx静态资源防盗链

1.什么是资源盗链 简单地说&#xff0c;就是将别人的资源用到自己的页面展示给用户。 2.效果演示 1&#xff09;准备图片 这两张图片直接在浏览器中访问都是可以打开的。 github图片地址&#xff1a;https://github.githubassets.com/images/modules/site/home-campaign/her…

linux命令sort, uniq ,tr, cut,split,paste,eval

sort 以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序。比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 语法格式: 格式1 sort [选项] 参数 格式2 cat file | sort 选顶选项含义-n按照数字进行排序…

MySQL8.0安装教程(很详细)

1.进入mysql官网 2.点击DOWNLOADS去下载页面&#xff0c;页面往下滚动&#xff0c;点击MySQL Community (GPL) Downloads 下载社区版 3.点击MySQL Installer for Windows–>选择window安装版 4.选择下面这一项&#xff0c;点击Download 5.点击No thanks, just start my down…

kali 装pwngdb报错版本不兼容

小白垃圾笔记而已&#xff0c;不建议阅读。 报错是这个&#xff1a; 安装pwndbg的时候报的错。 这个具体不知道啥原因&#xff0c;但是还好有师傅&#xff0c;其实这样装好后是可以用的&#xff0c;只是不兼容&#xff0c;可能有些功能会受限制。 师傅这样说&#xff1a; pwn…

权威报告:2030年企业将全面上云,隐私计算可保障数据上云安全可信

近日&#xff0c;国际权威机构Forrester发布了《亚太地区隐私保护技术&#xff08;PPTs&#xff09;现状》报告&#xff08;简称“报告”&#xff09;。报告显示&#xff0c;隐私保护技术在亚太地区发展强劲&#xff0c;76% 的决策者正在采用隐私计算来保护隐私和数据安全。For…

CMake的安装和使用

Windows平台 1. 下载CMake和MinGW&#xff0c;并安装。 &#xff08;1&#xff09;CMake下载和安装&#xff1a; 下载地址&#xff1a;Download | CMake 可以直接下载如下安装程序进行安装&#xff1a; 安装时注意&#xff0c;选择将cmake命令加入系统环境变量&#xff0c;…

python并发编程: Python速度慢的罪魁祸首,全局解释器锁GIL

python速度慢的两大原因 动态类型语言&#xff0c;边解释边执行 由于GIL&#xff0c;无法利用多核CPU并发执行 GIL是什么&#xff1f; 全局解释锁&#xff08;Global Interpreter Lock&#xff0c;GIL&#xff09;是计算机程序设计语言解释器用于同部线程的一种机制&#xff0c…

c#笔记-异常

异常 当一个程序遇到各种各样的问题而无法正常运行时&#xff0c;我们需要知道导致问题的原因&#xff0c; 并根据原因来解决问题。 一种常见的方式是程序给出一串错误码&#xff0c;然后开发人员查找对应的错误信息。 而在c#中&#xff0c;我们可以在程序内部就处理异常&am…

改进YOLOv8 | 即插即用篇 | 在 C2F 模块中添加 【SE】 【CBAM】【 ECA 】【CA 】注意力机制 | 附详细结构图

这篇教程是在你默认添加了《改进YOLOv8 | 即插即用篇 | 手把手教你 YOLOv8 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!》的代码后进行的后续改进的补充。 1. SE 注意力模块 论文名称:《Squeeze-and-Excitation Networks》 …

AI画图 Ubuntu 20.04.5 LTS x86_64 Docker stable diffusion webui 及 http api接口

资源 Docker镜像 docker pull darkroot1234/ayanami:latest 参考地址&#xff1a; docker一键运行stable diffusion webui&#xff0c;常用插件和功能完备&#xff0c;获得镜像后可打包带走 - 哔哩哔哩 nvidia cuda 驱动 ​​​​​​​Linux x64 (AMD64/EM64T) Display D…

numpy中reshape(1,-1) 和 reshape(-1,1) 的理解

我们都知道**reshape()方法**的作用是将数据按照指定的维度重新组织并返回。也就是reshape&#xff08;行&#xff0c;列&#xff09;可以根据指定的数值将数据转换为特定的行数和列数&#xff0c;就是转换。 但我们经常在大佬的代码中&#xff0c;或者报错提示中发现&#xf…

什么是虚拟机?

我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的&#xff0c;而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地&#xff0c;Mac OSX 系统上软件安装包则是 dmg 后缀&#xff0c;同样无法在 Windows 系统上安装。 为什么不同系统上的软件无法安装&#xff0c…

常见4种风险定量分析法

常见的风险定量分析方法主要有&#xff1a; 一、 敏感性分析法 用于确定哪些风险对项目影响最大&#xff0c;将其它不确定因素固定在基准值&#xff0c;再考察某个因素的变化会对目标产生多大的影响。 在这一分析中&#xff0c;检查每一个项目成分的不确定性对所检查项目目标的…

提示工程L1:关键原则

提示工程指南&#xff1a;关键原则 一、 环境配置 chatgpt使用有诸多限制&#xff0c;所以采用国产模型来代替&#xff0c;加载开源的chatGLM模型&#xff0c;使用ChatGLM-6b的INT8版本。 chatGLM6b在LLM匿名竞技场中的排名&#xff1a; import os import torch import war…