大事记

最近一个星期,项目组发生了一个天大的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()
  • 是一种稳定性排序
  • 插入排序适用于已经有部分数据已经排好,并且排好的部分越大越好

《数据结构与算法分析》之插入排序相关推荐

  1. 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...

    数据结构与算法分析 1.在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关. 2.如果有两个数,每个数的所有约数(除它本身以外)的和正好等 ...

  2. java数据结构排序实验报告_java数据结构与算法之插入排序详解

    本文实例讲述了java数据结构与算法之插入排序.分享给大家供大家参考,具体如下: 复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. ...

  3. s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...

    <数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...

  4. Weiss的数据结构与算法分析(C++版)源码编译说明

    最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下: 考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题.因而 ...

  5. 数据结构与算法分析(C++版)(第二版)

    查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...

  6. 数据结构与算法分析-第2章

    <?xml version="1.0" encoding="utf-8"?> 数据结构与算法分析-第2章 数据结构与算法分析-第2章 Table o ...

  7. (c#)数据结构与算法分析 --递归

    递归     不知道有新手听没听过别人拿剥糖块来形容递归,诸如一层层地剥好比一层层地进入递归.这种比喻可是误导了我,只想着剥了,其实剥完皮儿,取出糖块,再把皮儿一层层地穿上才算个完整的递归. 递归就是 ...

  8. 二叉堆(最小堆)(数据结构与算法分析的代码实现)

    "堆是一棵被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入.这样的树称为完全二叉树" "因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链&qu ...

  9. 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss

    数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:https://p ...

  10. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案...

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

最新文章

  1. 胜任素质--哈佛大学教授麦克里兰 (McClelland)有效地预测外交官实际工作业绩的人员选拔方法...
  2. 微软10亿美元砸入OpenAI:明为AGI,暗争谷歌,被指云计算换投资
  3. 岭南六少个人独立博客开通啦
  4. 分布式缓存系统之Memcached
  5. Nexus如何上传自己的jar包 (upload artifactory)
  6. 超图桌面版区分不同类型数据源的图标
  7. 判断浏览器的DOM模型
  8. 1.2.4 Selecting a defualt database
  9. 休眠事实:访存策略的重要性
  10. centos升级之内核kernel
  11. plex linux 数据目录,shareplex日常维护文档
  12. Node Sass version 6.0.0 is incompatible with ^4.0.0.
  13. 纯新手DSP编程--5.21--RTDX
  14. Qt学习之路系列教程目录
  15. Linux下的虚拟光驱和虚拟软驱
  16. python系列之supervisor进程管理
  17. 私活必备11个免费后台管理系统模板
  18. 野人岛java游戏,生存战争之独闯野人岛
  19. 用App Designer 制作2048小游戏
  20. Cmpp MsgId 生成算法

热门文章

  1. Android Studio 项目依赖由于资源在国外而下载不了的问题
  2. linux ssh su - 区别,su 与 su -区别
  3. 论文精度 —— 2017 CVPR《High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis》
  4. 多元复合函数的求导法则
  5. Ensight导入Fluent h5瞬态序列文件
  6. CDH平台YARN日志查看和问题排查
  7. logback日志使用记录
  8. java八大基本数据类型基本用法(含数据输入输出)
  9. VS code snippets
  10. 模糊视频帧插值:CVPR2020论文点评