java分析插入排序

news2024/11/18 10:29:13

首先查看一张经典的插入排序的图片
在这里插入图片描述

有图片可知,插入排序其字面的意思找到小的插入到前面就行
插入排序的基本思想就是分治:将数组分为两个区域,分别是已排序区和没有排序的区域
已排序区:假定一边的数组是都排序好的
wei排序区:假定一边的数组是还没有排序的区域
那么如何来进行插入排序?(假定一个数组如下所示)

int []arr = {9,2,6,4,5,1,3,7,8};
  • 首先假定这个数组的已经排序的区域为第0位,没有排序的区域为第0位后面的数组
  • 所以第一层的循环从第一个位置开始(未排序区域)
  • 用已排序区的元素分别与未排序区的元素进行比较,
  • 如果未排序区的元素大于已排序区的元素那么将未排序区的元素插入进来
  • 那么如何插入进去?
  • 一种办法就是将已排序区域比未排序区域的第一个元素小的元素都后移
  • 后移完成之后就将未排序区域的第一个元素插入进来
  • 下面将具体的代码写出来,然后用上面的数组进行举例子,逐步分析插入排序的过程
import java.util.Arrays;
public class Insertiom {
    public static void main(String[] args) {
        int []arr = {9,2,6,4,5,1,3,7,8};
        //将第0位看做已经排序好的元素,i为未排序区域的元素的下标,所以从第1位开始进行排序
        for (int i = 1; i < arr.length; i++) {
        //用j来表示已排序区域的元素的下标,因为第一次为0,所以为i-1
            int j = i-1;
        //用temp来存储未排序区域的第一个元素,即要插入的元素
            int temp = arr[i];
        //下面的while循环就是用temp来与已排序的区域做比较
            while(j>=0){
            //如果temp比已排序区域的元素小一点,那么将已排序区域的元素后移,直到所有的元素都比较完为止就break
                if(arr[j]>temp){
                    arr[j+1] = arr[j];
                    j--;
                }
                else{
                    break;
                }
            }
            //因为所有比temp大的元素都比较完了,所以j就会移到最后一个符合条件值的前一位因此是j+1;
            arr[j+1] = temp;
        }
        System.out.println(Arrays.toString(arr));
    }
}

以上就是插入排序的代码,其中while循环可以更加简单的写出来,将if的判断放到while里面,单个人感觉以上的代码更好理解一点
接着对以上的程序进行debug,就可以知道其具体的运行过程
第一次刚进入程序时如图所示
在这里插入图片描述
第一次if判断成功后,将第一位的9向后移动了一位,这时候j–的话就会变为-1,就会到与其刚才比较的前一位,因此在j的前一位可以插入未排序区域的值
在这里插入图片描述
在这里插入图片描述
这样第一次所有的比较就做完了,然后就是i++。
将已排序的区域增加,然后就是重复操作,大家可以自己debug一下。


**以上就是我对插入排序的一点浅见,欢迎大家留言**

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

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

相关文章

软件测试选Python还是Java?

目录 前言 1、先从一门语言开始 2、两个语言的区别 3、两个语言的测试栈技术 4、如何选择两种语言&#xff1f; 总结 前言 对于工作多年的从业者来说&#xff0c;同时掌握java和Python两门语言再好不过&#xff0c;可以大大增加找工作时的选择范围。但是对于转行的人或者…

Vue2之Vue-cli应用及组件基础认识

Vue2之Vue-cli应用及组件基础认识一、Vue-cli1、单页面应用程序2、vue-cli介绍3、安装和使用4、创建项目4.1 输入创建项目4.2 选择第三项&#xff0c;进行自主配置&#xff0c;按回车键即可4.3 选择自己需要的库4.4 选择Vue的版本4.5 选择CSS选择器4.6 选择Babel、ESLint、etc等…

Sitara™处理器的产品开发路线图

Sitara™处理器的产品开发路线图概述Evaluation Phase(评估阶段)Board Development Phase(硬件发展阶段&#xff0c;硬件设计人员应重点关注这个阶段)Software Development Phase(软件发展阶段)Product Phase/SW Lifecycle概述 一般情况下&#xff0c;会存在四个主要的发展阶段…

从0到1一步一步玩转openEuler--15 openEuler使用DNF管理软件包

文章目录15.1 搜索软件包15.2 列出软件包清单15.3 显示RPM包信息15.4 安装RPM包15.5 下载软件包15.6 删除软件包DNF是一款Linux软件包管理工具&#xff0c;用于管理RPM软件包。DNF可以查询软件包信息&#xff0c;从指定软件库获取软件包&#xff0c;自动处理依赖关系以安装或卸…

书籍《金字塔原理》读后感

上周读完了书籍《金字塔原理》这本书&#xff0c;这本书在管理学中&#xff0c;比较有名的书籍了&#xff0c;之前没怎么读过跟管理学相关书籍&#xff0c;这本算是第一本&#xff0c;是上级推荐给自己的&#xff0c;自己首先查了下&#xff0c;推荐度还是挺好的&#xff0c;看…

uniapp实现app检查更新与升级-uni-upgrade-center详解

app检查更新与升级 参考链接&#xff1a; 升级中心uni-upgrade-center - App uni-admin h5 api App资源在线升级更新 uni-app使用plus注意事项 关于在线升级&#xff08;WGT&#xff09;的几个疑问 什么是升级中心uni-upgrade-center uniapp官方开发的App版本更新的插件&#…

结构体的不定长数组,用起来就是这么爽

结构体的不定长数组 结构体数组不定长的做法&#xff0c;有两种 第一种&#xff1a; 指针 第二种&#xff1a;长度为0的数组 1. 结构体的数组指针 特点&#xff1a; 结构体初始化时&#xff0c;可以是结构体指针&#xff0c;如struct tag_info *pInfo NULL; 也可以是结构体变量…

Python文件和数据格式化(教程)

文件是一个存储在副主存储器的数据序列&#xff0c;可包含任何数据内容。 概念上&#xff0c;文件是数据的集合和抽象&#xff0c;类似的&#xff0c;函数是程序的集合和抽象。 用文件形式组织和表达数据更有效也更加灵活。 文件包括两种形式&#xff0c;文本文件和二进制文…

推荐几款市面上常用的免费CMS建站系统

小编在网站建设行业从业十几年&#xff0c;很多客户或者朋友找我做网站的时候&#xff0c;都喜欢开发一个完全熟悉自己的网站系统&#xff0c;但是小编这里很不推荐。从0到1全新开发&#xff0c;成本&#xff0c;效率和成熟度这些和主流的cms建站系统比起来&#xff0c;完全没有…

文件与IO

一.文件的定义什么是文件&#xff1f;文件分为狭义上的文件和广义上的文件 狭义上的文件&#xff1a;文件夹中的文件&#xff1a;包括视频、图片、文本、可执行文件等等......其中有些文件是有后缀名的&#xff0c;而有一些文件是没有后缀名的广义上的文件&#xff1a;在Linux系…

Unix Linux、MAC、Window 如何安装配置环境?都在这里啦~

嗨害大家好鸭&#xff01;我是小熊猫~ 这次将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 源码资料电子书:点击此处跳转文末名片获…

PHP代码审计神器——RIPS个人汉化版(2017年老文)

一、RIPS简介 RIPS是一款PHP开发的开源的PHP代码审计工具&#xff0c;由国外的安全研究者Johannes Dahse开发&#xff0c;目前开源的最新版本是0.55。 程序小巧玲珑&#xff0c;仅有不到500kb&#xff0c;其中的PHP语法分析非常精准&#xff0c;可以实现跨文件变量和函数追踪…

Virtualbox安装Windows11教程,提供虚机专用镜像下载。

微软在Windows11安装过程中增加了TPM2.0安全验证&#xff0c;所以一些老旧的电脑或者不带TPM认证协议的虚拟机都无法安装系统镜像。 这给我们体验尝鲜带来了一些小小的困扰。其实有2种解决方法可以在虚拟机中体验到Windows11带来的变化。 方法一 虚拟机启动时先加载PE系统镜…

Python 版本的常见算法模板(一)

文章目录前言排序模板排序算法归并排序KMP图邻接表Floyd 算法DijkstraBellMan-Ford 算法SPFA 算法Prim 算法Kruskra 算法染色法Hunger算法前言 翻了翻自己以前写的一些博文&#xff0c;发现的话&#xff0c;还是有一些误区没有写好的&#xff0c;所以的话这里的重新写一下&…

年薪40W的测试工程师被裁,回怼的一番话,令人沉思...

腾讯一位测试工程师被炒&#xff0c;回怼到:“反正我有技术&#xff0c;在哪不一样” 在腾讯上班的朋友给我分享了今天在他公司遇到的事情&#xff0c;他部门一位测试工程师被炒&#xff0c;具体原因好像就是跟上司闹矛盾&#xff0c;部门的都觉得非常可惜&#xff0c;因为他算…

本地修改的文件,使用git stash暂存之后不小心将暂存区清空,重新找回之前被暂存的文件

概述 问题 日常使用git 时&#xff0c;将本地所做的修改使用git stash暂存&#xff0c;使用git pull拉取代码之后&#xff0c;之间用git stash clear将git stash暂存的内容删除掉了。本文讲述如何恢复git stash clear掉的暂存区代码。 解决方法 执行指令 git log --graph -…

银行存取款程序设计(JAVA基础案例教程-黑马程序员编著-第三章-课后作业)

【案例3-2】银行存取款程序设计 【案例介绍】 案例描述 银行存取款的流程是人们非常熟悉的事情&#xff0c;用户可在银行对自己的资金账户进行存款、取款、查询余额等操作&#xff0c;极大的便利了人民群众对资金的管理。 本任务要求&#xff0c;使用所学知识编写一个银行存…

spring项目中使用策略模式

小白看了Java设计模式一书&#xff0c;晕晕乎乎&#xff0c;好像懂了&#xff0c;又好像啥都没懂。对照着书本一行行手打代码&#xff0c;完毕&#xff0c;执行&#xff0c;ok&#xff0c;设计模式已掌握。但到了项目中却又茫然。 小白我啊&#xff0c;今天尝试一下在自己的dem…

【思科设备,最常用的命令是下面这些吗!】

​在调试思科设备时&#xff0c;我们会经常使用各种命令去实现&#xff0c;但是使用最为频繁的有哪些&#xff1f;我们来看看下面频繁出现但是又非常有用且常用的命令&#xff01; 1、&#xff1f; 在使用命令行时&#xff0c;我们不可能记住所有的命令&#xff0c;有时候只能…

git的一些常用指令

1&#xff09;拷贝一个 Git 仓库到本地&#xff0c;让自己能够查看该项目&#xff0c;或者进行修改。 git clone 远程git仓库地址2&#xff09;初始化本地git仓库。 git init 3&#xff09;监控工作区的状态树&#xff0c;会把工作时的所有变化提交到暂存区&#xff0c;这里…