本文带来八大排序算法之插入排序。

插入排序(Insertion Sort)属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

插入排序基本思想:

把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

推导过程(以数组 arr = {101, 34, 119, 1}为例):

        //逐步推导,方便理解//第1轮{101, 34, 119, 1} ==> {34, 101, 119, 1}int insertValue = arr[1]; //根据插入排序定义,从第二个数开始找位置int insertIndex = 1 - 1; //表示待排序数前面的那个索引,即arr[1]前面数的下标while(insertIndex >=0 && insertValue < arr[insertIndex]){arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}//arr[insertIndex + 1] = insertValue; //当退出while 循环时,说明找到插入的位置了,即 insertIndex + 1 //此时isertIndex 为-1 故要 先 + 1System.out.println("第1轮排序后的顺序时:" + Arrays.toString(arr));//第2轮insertValue = arr[2]; //根据插入排序定义,从第3个数开始找位置insertIndex = 2 - 1; while(insertIndex >=0 && insertValue < arr[insertIndex]){arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}//arr[insertIndex + 1] = insertValue; //当退出while 循环时,说明找到插入的位置了,即 insertIndex + 1System.out.println("第2轮排序后的顺序时:" + Arrays.toString(arr));//第3轮insertValue = arr[3]; //根据插入排序定义,从第3个数开始找位置insertIndex = 3 - 1; while(insertIndex >=0 && insertValue < arr[insertIndex]){arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}//arr[insertIndex + 1] = insertValue; //当退出while 循环时,说明找到插入的位置了,即 insertIndex + 1System.out.println("第3轮排序后的顺序时:" + Arrays.toString(arr));

代码实现:

import java.util.Arrays;public class InsertSort {public static void main(String[] args){int[] arr = {101, 34, 119, 1};insertSort(arr);}//插入排序 insection sortpublic static void insertSort(int[] arr){int insertValue = 0;int insertIndex = 0;for(int i=1; i<arr.length; i++){insertValue = arr[i]; //表示待插入的数,根据插入排序定义,从第二个数开始找位置 insertIndex = i - 1; //表示待排序数前面的那个索引,即arr[1]前面数的下标//给insertValue 找到插入的位置//说明://1. insertValue >= 0 保证在给insertValue 找插入位置时,数组不越界//2. insertValue < arr[insertIndex] 表示 待插入的数 还没有找到插入位置//3. 找到位置后,需要将arr[insertIndex]后移动while(insertIndex >=0 && insertValue < arr[insertIndex]){arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}//优化--判断是否需要赋值if(insertIndex + 1 != i){arr[insertIndex + 1] = insertValue; //当退出while 循环时,说明找到插入的位置了,即 insertIndex + 1}System.out.println("第"+i+"轮排序后的顺序时:" + Arrays.toString(arr));}}}

Java实现插入排序及其优化 insertion sort相关推荐

  1. Java实现插入排序及其优化 Shell Sort

    本文带来八大排序算法之希尔排序. 希尔排序可以认为是插入排序的一种优化算法.在上一篇插入排序的举例数组中,当第二轮排序过后,数组变为[34, 101, 119, 1],此时如果将最后一个元素放到最前, ...

  2. [转载] python实现基本算法之插入排序(Insertion Sort)

    参考链接: Python中的插入排序insertion sort 基本算法之插入排序(Insertion Sort) 基本算法-02.插入排序(Insertion Sort)算法 冒泡排序已经发布,大 ...

  3. java中插入排序_Java中的插入排序

    java中插入排序 Today we will look into the Insertion Sort Java program. Insertion sort is similar to Bubb ...

  4. Java排序算法——插入排序(Insertion Sort)

    之前总结了交换排序的冒泡排序与选择排序的简单选择排序,这次我们来看看插入排序的简单插入排序~ 往期传送门: 冒泡排序: Java排序算法--冒泡排序(Bubble Sort)https://blog. ...

  5. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java

    LeetCode 147. Insertion Sort List 链表插入排序 C++/Java Sort a linked list using insertion sort. A graphic ...

  6. 插入排序(Insertion Sort)-Java实现

    插入排序(Insertion Sort)算法简介: 插入排序是一种丛序列左端开始依次对数据进行排序的算法.在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据. 插入排序(Inserti ...

  7. python实现排序算法_python实现·十大排序算法之插入排序(Insertion Sort)

    简介 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法实现步骤 从第一个元素开 ...

  8. c++Insertion Sort插入排序的实现算法(附完整源码)

    C++Insertion Sort插入排序的实现算法 C++Insertion Sort插入排序的实现算法完整源码(定义,实现,main函数测试) C++Insertion Sort插入排序的实现算法 ...

  9. C语言插入排序Insertion Sort算法(附完整源码)

    插入排序Insertion Sort算法 插入排序Insertion Sort算法的完整源码(定义,实现,main函数测试) 插入排序Insertion Sort算法的完整源码(定义,实现,main函 ...

最新文章

  1. this指向总结(无栗子)
  2. 现半透明的popupwindow
  3. ida android sign加密,最右sign-v2签名算法追踪及逆向还原
  4. c语言中用于判断ch是否是字符的表达式,最新C语言复习题集资料
  5. zabbix 监控 Esxi
  6. 【AtCoder】AGC017
  7. jmeter中重定向多个正则表达式_2020年jmeter技术实战续集,最新技术全栈,值得收藏
  8. Docker Redis 安装
  9. Java基础---其他对象
  10. ssl证书链的验证的其它方式
  11. pgAdmin 3 电脑管家清除后服务消失
  12. C语言用什么 IDE 好 - 除了 Visual Studio、VSCode、CLion 还有什么其他选择?
  13. 经济类图书推荐--转自水木
  14. 复杂电路简化经典例题_复杂电路的简化策略
  15. 阿里天池新人赛——幸福感挖掘
  16. Android游戏开发---碰撞检测
  17. 冯诺依曼计算机体系结构
  18. 【无标题】input开始输入文字,到输入结束触发事件
  19. 图像处理入门100题(三)
  20. STM32蓝牙小车制作全过程---刚入门的小白也能会

热门文章

  1. Ubuntu16.04下CUDA 9.0 + cuDNN v7.0 + tensorflow 1.6.0(GPU)环境搭建
  2. uvalive5798(树状数组)
  3. AtCoder AGC004F Namori (图论)
  4. 特征值与特征向量(二)
  5. kafka 启动_「首席看Event Hub」如何在您的Spring启动应用程序中使用Kafka
  6. 删除你的所有计算机文件的英文,《电脑文件英文对照》.doc
  7. 【LeetCode】103# 二叉树的锯齿形层次遍历
  8. 「日常训练」Skills(Codeforce Round #339 Div.2 D)
  9. html的head中的常见元素
  10. MySQL - 日常操作二 备份还原