java里怎么存入数据并进行排序_Java数据结构之排序---插入排序

插入排序的基本介绍:

插入排序是对想要排序的序列以插入的方式寻找该元素的适当的位置,从而达到排序的目的。

插入排序的基本思想:

把n个待排序的元素看成一个有序表和一个无序表,开始时,有序表只有一个元素(整个序列的第一个元素看成有序表的第一个元素),无序表中有n-1个元素,在接下来的排序过程中,每次从无序表中取出一个元素,将它依次与有序表中的元素进行比较(注意:与有序表中元素比较的顺序是从后向前),将它插入到有序表中的适当的位置,使其成为新的有序表。

插入排序的基本思路图:

5afda779a0a920427683c11afd2cc1ca.png

接下来,我会通过代码讲述插入算法的实现过程,也会通过两种方式进行讲解:分步骤的实现,整体的实现。具体的解释,我将在代码的注释中进行标注。

(1).分步骤的实现

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr = {101,34,119,1};

insertSort(arr);

}

//直接插入排序

public static void insertSort(int[] arr){

//第一趟排序

//因为我们第一个元素是有序表中的元素,因此我们在从无序表中取第一个元素的时候(索引为1),应该让其与它前一个元素进行比较。

//所以我们要比较元素的索引值应该是1-1=0

//之后我们将带排序的元素赋值给insertVal(因为是第一躺,所以是arr[1])

int insertIndex = 1-1;

int insertVal = arr[1];

//这里面我们通过insertIndex>=0来限制数组越界

//并且当我们插入的元素小于它之前的元素时,执行该循环

while(insertIndex>=0 && insertVal

//将有序列表中的元素后移

arr[insertIndex+1] = arr[insertIndex];

//当进行比较的时候,说明现在insertIndex位置的元素已经比我们待插入的元素大了,这个时候我们应该将insertIndex向前移动一位继续比较,

//一直到insertIndex<0(待插入元素最小)或者找到一个比待插入元素小的数为止

insertIndex--;

}

//这里注意的是insertIndex+1,因为经过上述insertIndex--,我们最终得到的insertIndex比我们待插入的值少1,因此下面我们要加1,之后把insertVal插入进去。

arr[insertIndex+1] = insertVal;

System.out.println("第一趟排序的结果:");

System.out.println(Arrays.toString(arr));

//第二趟排序

insertIndex = 2-1;

insertVal = arr[2];

while(insertIndex>=0 && insertVal

arr[insertIndex+1] = arr[insertIndex];

insertIndex--;

}

arr[insertIndex+1] = insertVal;

System.out.println("第二趟排序的结果:");

System.out.println(Arrays.toString(arr));

//第三趟排序

insertIndex = 3-1;

insertVal = arr[3];

while(insertIndex>=0 && insertVal

arr[insertIndex+1] = arr[insertIndex];

insertIndex--;

}

arr[insertIndex+1] = insertVal;

System.out.println("第三趟排序的结果:");

System.out.println(Arrays.toString(arr));

}

上述代码最终的结果如下所示:

83c0c8c74fc2d8e8ff61add83f614085.png

(2).整体的代码实现

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr = {101,34,119,1};

insertSort(arr);

}

//直接插入排序

public static void insertSort(int[] arr){

//直接插入排序

//通过上面的步骤,我们知道执行插入排序我们只需要每次改变i的值即可。

//因此整体的代码如下

for(int i=1;i

int insertVal = arr[i];

int insertIndex = i-1;

while(insertIndex>=0 && insertVal

arr[insertIndex+1] = arr[insertIndex];

insertIndex--;

}

arr[insertIndex+1] = insertVal;

System.out.println("第"+i+"趟的排序:");

System.out.println(Arrays.toString(arr));

}

}

上述代码的最终结果如下:

81f21098303f4f0c14932405f0121ae5.png

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

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

相关文章

db h2 数据类型_H2Database数据类型

标签&#xff1a;整数(INT)INT | INTEGER | MEDIUMINT | INT4 | SIGNED值的范围为&#xff1a; -2147483648 到 2147483647.对应到Java类型&#xff1a; java.lang.Integer.例如&#xff1a;INT布尔型(BOOLEAN)BOOLEAN| BIT | BOOL可能的值为&#xff1a; TRUE 和 FALSE。对应到…

etmvc mysql乱码_etmvc中集成spring使用druid连接池

etmvc中ActiveRecord(下称AR)在使用上可以独立使用&#xff0c;其数据库的连接信息通过activerecord.properties进行配置&#xff0c;具体如下&#xff1a;domain_base_classcom.et.ar.ActiveRecordBasecom.et.ar.ActiveRecordBase.driver_classcom.mysql.jdbc.Drivercom.et.ar…

java ftp读取文件内容_java读取ftp中TXT文件的案例

最近在开发关于java读取ftp中TXT文件&#xff0c;其中有些坑踩了一下&#xff0c;再次做个记录1、读取文件时我会根据文件名称去生成数据库表&#xff0c;oracle数据库对于表名的长度是有限制的&#xff0c;最多30个字符2、对于多个文件的ftp的读取&#xff0c;每次获取文件后再…

java sql server 2016_SQL server 2016 安装步骤

1.进入安装中心&#xff1a;可以参考硬件和软件要求、可以看到一些说明文档2.选择全新安装模式继续安装3.输入产品秘钥&#xff1a;这里使用演示秘钥进行4.在协议中&#xff0c;点击同意&#xff0c;并点击下一步按钮&#xff0c;继续安装5.进入全局规则检查项&#xff0c;这里…

java resource file_Java 获取Resource目录下的文件解决办法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Java 获取Resource目录下的 文件有两种方式&#xff1a;Java代码中的类&#xff0c;要获取Resource资源 文件目录 下文件绝对路径寻址注意这个 / 址的是根 目录 &#xff0c;用绝对路径&#xff0c;可能会出现的问题是&#xff0c;…

java中有哪些锁_Java中有哪些锁?

1.公平锁 / 非公平锁2.可重入锁 / 不可重入锁3.独享锁 / 共享锁4.互斥锁 / 读写锁5.乐观锁 / 悲观锁6.分段锁7.偏向锁 / 轻量级锁 / 重量级锁8.自旋锁一、公平锁 / 非公平锁公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁非公平锁是指多个线程获取锁的顺序并不是…

java中对象类型转换_Java中的对象的类型转换介绍(附代码)

本篇文章给大家带来的内容是关于Java中的对象的类型转换介绍(附代码)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。向上转型&#xff1a;子类对象转为父类&#xff0c;父类可以是接口。公式&#xff1a;Father f new Son(…

java中的single_解析java泛型(一)

对于我们java中的泛型&#xff0c;可能很多人知道怎么使用并且使用的还不错&#xff0c;但是我认为想要恰到好处的使用泛型&#xff0c;还是需要深入的了解一下它的各种概念和内部原理。本文将尽可能的囊括java泛型中的重要的概念。主要内容如下&#xff1a;泛型的定义及为什么…

java面板中添加面板_如何把窗体加入面板中 java

展开全部一般来说,我们常把JPanel[面板]放到JFrame窗体中但是也有一种内部窗体JInternalFrame ,可以放到其他的容器JDesktopPane里,效果图e69da5e887aa62616964757a686964616f31333363373731如下代码如下import java.awt.*;import java.awt.event.*;import java.beans.Property…

mysql 如果存在修改_mysql如存在并发修改可能,一定要注意保证数据一致性

近日&#xff0c;因人员调整接手了一个其他部门负责的项目。随后发现其中的很多关键环节是没有考虑mysql并发操作的&#xff0c;现列出存在的一例问题 并分享如何解决的。问题描述&#xff1a;用户账户余额转移赠送 (用户A将自己的账户剩余金额赠送给用户B),同一时刻还可能存在…

python prt_Python中的self

self代表类的实例&#xff0c;而非类。实例来说明Python1234567classTest:defprt(self):print(self)print(self.__class__)tTest()t.prt()执行结果如下Python12从上面的例子中可以很明显的看出&#xff0c;self代表的是类的实例。而self.class则指向类。self不必非写成self有很…

微信对账单 java_微信支付对账,你是如何处理的?

支付对账&#xff0c;即检查第三方支付与数据库中账单是否一一对应&#xff0c;涉及到微信对账单的处理&#xff0c;成功时&#xff0c;微信账单接口返回数据以文本表格的方式返回&#xff0c;第一行为表头&#xff0c;后面各行为对应的字段内容&#xff0c;字段内容跟查询订单…

java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼谈论Java技术似乎无处不在&#xff0c;但究竟是什么呢&#xff1f;下面的部分将解释Java技术如何既是一种编程语言&#xff0c;又是一种平台&#xff0c;并概述这种技术可以为您做些什么。Java编程语言是一种高级语言&#xff0c;可…

java中常用的关键字_java中的常用的关键字

在java编程过程中&#xff0c;会经常写到一些关键字&#xff0c;但是对于他们应用的方式其实一直是模仿状态&#xff0c;并没有很实质的去了解&#xff0c;为什么要这么用&#xff0c;导致程序不能优化&#xff0c;或者出现了bug不明所以&#xff0c;因而再详细的去重温了一下各…

java如何处理灰度图片_Java图片的灰度处理方法

通过看网上各种大牛的总结&#xff0c;和自己亲身测试总结一下Java图片的灰度处理方法(1)我们熟知的图片中的像素点有RGB值。(2)图片灰度化的方式大概分为四种&#xff0c;第一种是最大值法(取颜色RGB中的最大值作为灰度值)&#xff1b;第二种是最小值法(取颜色RGB的最小值作为…

java多项式和_在Java中查找多项式的根

小编典典请找到以下相同的示例示例public class PolynomialRootFinder {/*** * Given a set of polynomial coefficients, compute the roots of the polynomial. Depending on* the polynomial being considered the roots may contain complex number. When complex numbers …

java7 nio2 新特性_JDK7新特性,你知道几个?

前言之前学习的过程中&#xff0c;每天都是老师说这个是JDK7以后可以使用&#xff0c;那个是JDK8以后可以使用&#xff0c;每天都记的很混乱&#xff0c;今天专门忙里偷闲&#xff0c;归拢整理下JDK7的新特性&#xff0c;对于JDK的新特性&#xff0c;后期会进行整理更新&#x…

java jsp校验提示信息_java Jquery表单校验代码jsp页面

jsp.file欢迎注册EasyMall/* 注册表单的js校验 */var formObj {/* 检查输入项是否为空 */"checkNull" : function(name, msg){var value $("input[name"name"]").val().trim();//清空之前的提示消息formObj.setMsg(name, "");if(val…

错误处理方法 java_JAVA常见错误处理方法 和 JVM内存结构

OutOfMemoryError在开发过程中是司空见惯的&#xff0c;遇到这个错误&#xff0c;新手程序员都知道从两个方面入手来解决&#xff1a;一是排查程序是否有BUG导致内存泄漏&#xff1b;二是调整JVM启动参数增大内存。OutOfMemoryError有好几种情况&#xff0c;每次遇到这个错误时…

java中如何分隔字符串_Java中分割字符串

java.lang.String的split()方法, JDK 1.4 or laterpublic String[] split(String regex,int limit)示例代码public classStringSplit {public static voidmain(String[] args) {String sourceStr "1,2,3,4,5";String[] sourceStrArray sourceStr.split(",&quo…