《数据结构与算法分析》之插入排序
大事记
最近一个星期,项目组发生了一个天大的bug,被定级为P1级别(P级故障,0-5,数字越小影响越大,发生0级故障公司可能就要倒闭了)。
领导吃饭的时候亲口说,会连坐5级;这个故障已经跟CEO汇报了3次都不满意。
据小道消息王子(每个公司,每个部门都会有那么几个消息很灵通的机灵boy)说,写代码的那个哥们可能会被公司辞退。
看来写代码还是一个高危行业!说不定哪天就拉出去祭旗,祭天了。
根据墨菲定律,每个人都不可能100%出错,今天的被辞退的别人,说不定就是明天的,下一个的自己。心底难免升起一丝丝悲凉。公司不会管你的房贷,车贷,花呗,借呗会不会还的起,不会管你是否要养家糊口,总之没用了就要扔掉。
有时候管理需要温度,公司也应该讲情怀。如果公司管理没有温度,不讲情怀,不讲贡献,但是口号天天宣传这些,当你发现的时候,跑路的时候也不要流恋,坚定的转身离去。
要么有离开的勇气,要么有熬下去的决心;如果都没有,有的时候就会上班如上坟,每一秒都是身心煎熬!
工作很重要,始终却只是一份工作。你需要认真的工作,但不可为了工作牺牲自己的健康,家庭,尤其是灵魂!
健康,家庭,灵魂,朋友,工作组成了生命了5个球,唯一只有工作掉在地上,还可以再捡起来,其它任何一样,掉在地上,破碎了就再也难圆。珍惜身边的家人,朋友,尊重自己的内心。
最后,毕竟是技术人,对代码多一份敬畏之心!
插入排序
在学校的时候学过数据结构与算法,当时还是C语言的。
后来工作这么多年,也用的不多,这部分看的也不多。
最近总觉基础不牢,天天写应用代码是不够,所以打算花点时间系统再复习一下。说复习都夸张了,因为学校的时候也没怎么学好,应该是再学习一遍。
什么是插入排序
插入排序是相对比较简单的一种算法(insertion sort)。
插入排序由N-1趟排序组成,对于p=1到N-1趟排序保证从位置0到位置p上的元素为已排序状态。
插入排序基于这样的一个事实:位置0到位置p-1上的元素已经处于排过序的状态。
看一个例子分析一下:
原始数组 | 34 | 8 | 64 | 51 | 32 | 21 | 移动的位置 |
p=1 趟之后 p=2 趟之后 p=3 趟之后 p=4 趟之后 p=5 趟之后 |
8 8 8 8 8 |
34 34 34 32 21 |
64 64 51 34 32 |
51 51 64 51 34 |
32 32 32 64 51 |
21 21 21 21 64 |
1 0 1 3 4 |
上面一个数组:[34,8,64,51,32,21],有6个元素。
- p=1趟时,34与8比较,排序结果为[8,34]
- p=2趟时,将64与[8,34]比较,不用移动元素位置,排序结果为[8,34,64]
- p=3趟时,将51与[8,34,64]比较,51在34与64中间,经过一次比较得到排序结果[8,34,51,64]
- p=4趟时,将32与[8,34,51,64],找到合适位置在8与34中间,经过3次比较,得到排序结果[8,32,34,51,64]
- p=5趟时,将21与[8,32,34,51,64],找到合适位置在8与32中间,经过4次比较,得到排序结果[8,21,32,34,51,64]
一共进行了5趟排序,然后数组变成了有序。下面我们用java程序来实现一下
java实现
用java代码实现一下上面说到的插入排序
public class InsertionSortTest {@Testpublic void test() {int sortArray[] = {34, 8, 64, 51, 32, 21};insertionSort(sortArray);for (int i = 0, j = sortArray.length; i < j; i++) {System.out.println("排序之后的数组结果:" + sortArray[i]);}}/*** 插入排序算法** @param a*/private void insertionSort(int a[]) {int j;// 外层循环,共N-1趟for (int p = 1; p < a.length; p++) {// 每一趟需要排序的元素,用tmp来记录这个变量int tmp = a[p];// 内层循环,用tmp对数组前p-1位置上的每一个元素比较,如果发现变量比被比较位置上的元素小,就将当前元素向前移动for (j = p; j > 0 && tmp < a[j - 1]; j--) {a[j] = a[j - 1];}// 将空出来的位置tmp填充a[j] = tmp;}}
}
打印的结果
上面代码共分为2层循环,
- 外层循环就是N-1趟,比如{34, 8, 64, 51, 32, 21}这个数组,6个元素,会共进行5趟比较。
- 内层循环就是将位置为p上的元素a[p]与前面已经排序的元素进行比较,碰到比a[p]小的元素,就将被比较位置上的元素向前移动一个位置
- 最后将空出来的位置上,填充a[p]
上面的过程演示了这个算法为什么叫插入排序,就是将比较元素不断的插入到合适位置的过程
当然在实际的java程序中,可能会用对象比较:如果对象是可比较的(实现了Comparable接口),上面的内循环比较可以用compareTo方法
对象排序的例子
算法总结
- 时间复杂度为O(
)
- 是一种稳定性排序
- 插入排序适用于已经有部分数据已经排好,并且排好的部分越大越好
《数据结构与算法分析》之插入排序相关推荐
- 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...
数据结构与算法分析 1.在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关. 2.如果有两个数,每个数的所有约数(除它本身以外)的和正好等 ...
- java数据结构排序实验报告_java数据结构与算法之插入排序详解
本文实例讲述了java数据结构与算法之插入排序.分享给大家供大家参考,具体如下: 复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. ...
- s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...
<数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...
- Weiss的数据结构与算法分析(C++版)源码编译说明
最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下: 考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题.因而 ...
- 数据结构与算法分析(C++版)(第二版)
查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...
- 数据结构与算法分析-第2章
<?xml version="1.0" encoding="utf-8"?> 数据结构与算法分析-第2章 数据结构与算法分析-第2章 Table o ...
- (c#)数据结构与算法分析 --递归
递归 不知道有新手听没听过别人拿剥糖块来形容递归,诸如一层层地剥好比一层层地进入递归.这种比喻可是误导了我,只想着剥了,其实剥完皮儿,取出糖块,再把皮儿一层层地穿上才算个完整的递归. 递归就是 ...
- 二叉堆(最小堆)(数据结构与算法分析的代码实现)
"堆是一棵被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入.这样的树称为完全二叉树" "因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链&qu ...
- 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss
数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:https://p ...
- 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案...
转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...
最新文章
- 胜任素质--哈佛大学教授麦克里兰 (McClelland)有效地预测外交官实际工作业绩的人员选拔方法...
- 微软10亿美元砸入OpenAI:明为AGI,暗争谷歌,被指云计算换投资
- 岭南六少个人独立博客开通啦
- 分布式缓存系统之Memcached
- Nexus如何上传自己的jar包 (upload artifactory)
- 超图桌面版区分不同类型数据源的图标
- 判断浏览器的DOM模型
- 1.2.4 Selecting a defualt database
- 休眠事实:访存策略的重要性
- centos升级之内核kernel
- plex linux 数据目录,shareplex日常维护文档
- Node Sass version 6.0.0 is incompatible with ^4.0.0.
- 纯新手DSP编程--5.21--RTDX
- Qt学习之路系列教程目录
- Linux下的虚拟光驱和虚拟软驱
- python系列之supervisor进程管理
- 私活必备11个免费后台管理系统模板
- 野人岛java游戏,生存战争之独闯野人岛
- 用App Designer 制作2048小游戏
- Cmpp MsgId 生成算法