插入排序的基本介绍:

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

插入排序的基本思想:

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

插入排序的基本思路图:

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

(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));

}

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

(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));

}

}

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

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

  1. java系统排序_Java实现二进制排序树

    在计算机科学中,树是非常重要的数据结构二叉排序树是树的一种特殊情况二叉排序树是,它的每个节点只能有两个子节点,左子树的节点小于其父节点,右子树中的节点大于其父节点. 父节点二进制排序树在搜索中使用非常 ...

  2. 数据结构 排序 java_Java数据结构之排序---希尔排序

    希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...

  3. java数据接口之链表_Java数据结构和算法之链表

    三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LI ...

  4. java语言中的数据是如何定义_java中的数据类型

    java中的数据类型 java语言的数据类型包括两种,基本数据类型和引用数据类型. 定义 基本数据类型:变量名指向具体的数值. 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值. ...

  5. java treeset排序_java TreeSet的排序之自然排序

    TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int com ...

  6. java collections.sort 忽略大小写排序_Java Spring Mongo排序忽略大小写问题

    我正在使用Spring-Data-mongodb对MongoDB执行各种请求. 尝试执行分页&时用忽略的情况排序我得到一个例外, 这是我的代码: Sort.Order order = new ...

  7. java中集合的排序_Java中集合排序的两种方法

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  8. java找出一组数据缺少最小数组_Java获取一维数组的最小值实现方法

    编写程序,实现接受用户在文本框中输入的单行数据.这些数据都是整数数字,以空格进行分隔,空格数量不限.并将这些数据分割成一维数组,再从数组中提取最小值显示在界面中.思路是先对用户的输入进行验证,即先用t ...

  9. java中除了跟数据相关的知识_Java的基本数据类型及知识介绍

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

最新文章

  1. python简单入门_Python简明入门教程
  2. python多维数据分析_Python 数据分析:numpy 多维数组 ndarray
  3. kettle连接hadoophdfs图文详解
  4. 2075. 解码斜向换位密码
  5. zabbix mysql pgsql_Zabbix 5.0 监控 PostgreSQL 数据库
  6. 架构师2月刊发布:解读Android、高效运维、API设计方法论
  7. 资产放中间,模型策略放两边
  8. JVM 可设置最大内存
  9. 怎样往mysql里添加数据_怎么往mysql表里添加数据
  10. JAVA 服务端模拟客户端请求http/https
  11. SQL Server 机考,用T-SQL编写 简单实例
  12. 存储过程实例(用存储过程获取单张表的总记录数)
  13. SI4438系列模块调试
  14. freyja框架 github地址
  15. docker 容器健康检查
  16. 写代码累了,读读这些书~
  17. 计算机文件自动备份到移动硬盘,电脑文件定时自动备份到移动硬盘,有什么方法?...
  18. 其实装修也是工程管理
  19. 数据挖掘技术的应用领域
  20. Python跟孩子一起学编程之一

热门文章

  1. php并发取源码,PHP读取大文件源码示例-Swoole多进程读取大文件
  2. @JsonProperty注解解析
  3. Gson之toJson和fromJson方法
  4. linux命令 socket,如何从linux中的命令行向socket.io websocket发送消息?
  5. python 编译器pyc_有没有办法知道哪个Python版本.pyc文件被编译?
  6. linux和信息资源管理,Linux top命令详解
  7. mysql数据库栏目_MySQL的一些小技巧(持续更新) - mysql数据库栏目
  8. python组成结构_Python数据分析丨pandas基本数据结构组成
  9. Spring Boot————BeanCreationNotAllowedException异常分析
  10. 价值50万年薪的Java面试题