经典算法(三):插入排序
2016-12-29 23:19
155 查看
小葵花课堂开课啦!孩子算法老不好,多半是没浏览我滴博客,只要多浏览我滴博客就会好!!最近,某某人要换工作,我说最近在学习算法,然后就惹到某某人了,不更新算法博客,那家伙大男子主义,哎呀妈呀,受不了,希望大家可怜可怜我这被逼写博客的心情,多多访问,多多交流!!(不好,眼泪流到键盘上了),不废话了,言归正传!
是不是看到这啰里啰唆的定义,就很反感了呢,举个栗子,以下4个数为例:
4 3 1 2
第1次插入:3 4 1 2
第2次插入:1 3 4 2
第3次插入:1 2 3 4
请看下面图解:
其中 (a)代表第1次情况,(b)代表第2次情况,(c)代表第3次情况。以第2次为例,首先插入的数位置要与它前面的数进行比较,所以 1先与4进行比较,4>1,所以,4要右移;然后再与3进行比较,3>1,所以,3要右移,所以1的位置在最顶端(最左边)。
是不是有些地方不明白,我刚开始也是很不明白,下面我来解释一下,首先第二个for循环的判断条件,我们说过要与插入位置前面的数进行比较,但是只有前面的数大于插入的数我们才需要执行这个for循环,才能进行里面的右移操作。
有些人可能认为为什么后面还要对arrs[j]进行赋值,其实跳出循环的时候,我们的J已经执行一次减减操作,所以现在这个J的位置也就是我们想要插入的位置,所以需要把要插入的数进行赋值。
最后,看一下运行结果:
一、算法描述
插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中……第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。是不是看到这啰里啰唆的定义,就很反感了呢,举个栗子,以下4个数为例:
4 3 1 2
第1次插入:3 4 1 2
第2次插入:1 3 4 2
第3次插入:1 2 3 4
请看下面图解:
其中 (a)代表第1次情况,(b)代表第2次情况,(c)代表第3次情况。以第2次为例,首先插入的数位置要与它前面的数进行比较,所以 1先与4进行比较,4>1,所以,4要右移;然后再与3进行比较,3>1,所以,3要右移,所以1的位置在最顶端(最左边)。
二、算法实现
public class InsertSort { public static void main(String[] args) { int arrs[] = { 1, 8, 9, 45, 36, 15, 7, 36, 190, 699, 100 }; int temp; // 从第二个数进行插入 for (int i = 1; i < arrs.length; i++) { // 待插入的数 temp = arrs[i]; int j = 0; for (j = i; j > 0 && arrs[j - 1] > temp; j- -) { arrs[j] = arrs[j - 1]; } arrs[j] = temp; } for (int i = 0; i < arrs.length; i++) { System.out.print(arrs[i] + "\t"); } } }
是不是有些地方不明白,我刚开始也是很不明白,下面我来解释一下,首先第二个for循环的判断条件,我们说过要与插入位置前面的数进行比较,但是只有前面的数大于插入的数我们才需要执行这个for循环,才能进行里面的右移操作。
有些人可能认为为什么后面还要对arrs[j]进行赋值,其实跳出循环的时候,我们的J已经执行一次减减操作,所以现在这个J的位置也就是我们想要插入的位置,所以需要把要插入的数进行赋值。
最后,看一下运行结果:
三、总结
是不是感觉算法没有想象中的特别难,插入排序适合像一个有序的数组里面插入一个数的场景,这样会节省很多时间,但是数组不要过长,否则一样会很慢的哟!!相关文章推荐
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 【转载】白话经典算法系列之二 直接插入排序的三种实现
- 【白话经典算法系列之二】 直接插入排序的三种实现
- 经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 【经典算法】第三回:插入排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现