插入排序原理(java实现)
来源:互联网 发布:unreal 源码分析 编辑:程序博客网 时间:2024/06/06 20:34
插入排序也是排序算法的一种,他的排序定义是这样:把一个数插入到一个有序数列的合理位置,并使插入后数列仍然有序,不断重复这个过程,就能使整个数组成为有序数列。
听起来很难理解,对吧,不如我们举个例子,假定一个整型数组{7,5,6,4,3,1,2},对他进行从小到大的排序,按照定义说的,把一个数插入到一个有序数列的合理位置,什么是有序数列呢,哪里来的有序数列呢,本来就是让变得有序,原来就有序那还用排序吗?博主刚开始也是很不理解为什么这么定义,后来才慢慢明白其中的道理
比如上面说的这个数组,我们应该怎么看,首先看下标0和下标1位置中的数,7和5,先让他俩从小到大排好,5比7小,那就让5放到7的前面,于是就变成了{5,7,6,4,3,1,2},现在,前两个数就是定义中说的有序数列了,对于刚刚比较的7和5来说,7这个数,就是定义中说的有序数列,好,我们完成剩余的过程
再来看下标2,首先让他和下标1进行比较,6比7小,那么将7放到6的位置,拿6去跟下标0,也就是5,比较,6比5大,所以6应该放在5后面,下标1的位置,数组变成{5,6,7,4,3,1,2},看到这里读者可能不明白了,为什么开始的时候就将7放到6的位置,别急,接着往下看
看下标3,让他跟前一个数,下标2,也就是7比较,4比7小,那7往后移,放到4的位置,再拿4和下标1的数据进行比较,4比6小,那么6往后移,再拿4和下标0的数据进行比较,4比5小,那么5往后移,这时候,前面没有数据了,那么4就放到了下标0的位置,数组变成{4,5,6,7,3,1,2}
后面的操作也是一样,依次把下标4,下标5,下标6中的数据拿出来跟前面的数进行比较,如果前面的数大,就让他往后移一个位置,直到前面的数不大于要插入的数了,再将其插入,看到这儿,你明白刚刚说的将7放到6的位置是为什么了吗?因为这个数据结构是数组,你要插入,就必须将各个元素往后移,才能空出位置,但是,要注意的是,往后移的同时,会产生数据覆盖,就比如第一轮说的7放到6的位置,那6就没了,所以怎么办?再定义一个整型变量target去保存这个数,防止数据覆盖,读者可以参照上面的例子和下面的代码,自己走一走步骤,就明白了
下面是Java代码实现:
//插入排序原理class Demo{ public static void main(String[] args) { //定义整形数组 int[] arr = {2,1,3,5,7,6,4}; //调用插入排序函数 InsertSort(arr); //输出排序后的数组 for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } } //定义插入排序函数 public static void InsertSort(int[] arr) { for(int i=1;i<arr.length;i++) { //将要比较的值赋值给target,否则将被覆盖,无法找到 int target = arr[i]; //定义j来控制下标 int j = i; //当满足j>0并且target<arr[j-1]的时候,循环 while(j>0 && target<arr[j-1]) { //满足target<arr[j-1]就把数组向后移 arr[j] = arr[j-1]; j--; } //循环结束后,j就是要插入的位置,将target赋值给arr[j] arr[j] = target; } }}
- 插入排序原理(java实现)
- 简单排序Java实现(一):冒泡排序,选择排序,插入排序(原理及实现)
- 插入排序原理分析及Java实现
- 插入-排序原理及Java 实现
- 【排序算法】插入排序原理及Java实现
- 插入排序(java实现)
- 插入排序实现(Java)
- 插入排序(java实现)
- 插入排序(Java实现)
- 插入排序(Java实现)
- 排序-插入排序(java实现)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- 直接插入排序算法原理及JAVA实现
- 二分法插入排序算法原理及JAVA实现
- 直接插入排序算法原理及JAVA实现
- java实现折半插入排序(二分插入排序)
- 插入排序(包括二分法插入排序)-java实现
- java实现插入排序
- JavaScript的闭包
- ACM集训日记-8月12日
- 真正从零开始,TensorFlow详细安装入门图文教程!
- 让你的情商爆棚(提高情商的方法)
- 函数和循环闭包的理解
- 插入排序原理(java实现)
- linux中的系统启动问题
- GPS数据处理——字符串编程练习(C语言)
- 小程序第一天学习
- python+opencv+caffe+摄像头做目标检测
- jdk多版本共存配置(jdk1.8也会对其有影响)
- HDU 2546-饭卡(01背包)
- JavaScript闭包案例
- 2017暑假集训小结