排序(六):归并排序

【摘自《大话数据结构》】

2017-09-26 19:19:38

阅读数 112

评论数 0

排序(五):堆排序

【本篇内容图示流程分析均来自《大话数据结构》一书,作者—程杰】 首先来看两张有规律存在的完全二叉树图示: 图示来自《大话数据结构》 左图中根结点是所有元素中最大的,右图的根结点是所有元素中最小的。再细看看,发现左图每个结点都比它的左右孩子要大,右图每个结点都比宫的左右孩子要小。这就是我们要...

2017-09-26 10:36:49

阅读数 187

评论数 0

排序(四):希尔排序

前边的三次讨论的排序算法的时间复杂度都为O(n2),那么有没有时间复杂度更小的算法呢?答案是肯定的。 在第一篇冒泡排序算法中介绍过,冒泡、选择、插入算法方案都是简单算法,之所以被列为“简单”的行列原因大致是时间复杂度大于还是小于O(n2)。下边将继续介绍第一种时间复杂度优于O(n2)的算法:希尔排...

2017-09-22 10:24:18

阅读数 143

评论数 0

排序(三):插入排序

前边分别讨论了冒泡排序和选择排序,并分析了二者时间复杂度及性能优劣。这里继续介绍另一种排序算法:直接插入排序。这是一种比前二者性能都要好些的排序方法。 所谓插入排序,由字面上不难猜出就是把相对较小(从小到大排序)的元素插入到数组中准确的位置实现有序数组的生成。 定义:直接插入排序(Straig...

2017-09-21 23:43:33

阅读数 64

评论数 0

排序(二):选择排序

上篇博文介绍了冒泡排序,同时也对其进行了优化,这里再进行另外一种排序:简单选择排序。相比冒泡排序来说,其性能有略微提升。 正如我们了解到的那样,冒泡排序是基于不断的比较数据大小进行交换实现的,极端情况下会进行N * (N - 1) / 2次交换。而选择排序最多进行N - 1 次交换。 下面基于Ja...

2017-09-21 17:13:08

阅读数 96

评论数 0

排序(一):冒泡排序

首先引入一个例子:假如班级考试成绩排名,首先根据总成绩确定名次。那如果总成绩有相同的情况,那么再按照数语外三科成绩之和进行排名,如此以来我们需要比对两次。那么我们可以考虑,把这两个关键字(总成绩、数语外三科成绩)的值拼接在一起,位数不够的补零,这样以来就能直接比较出个优劣来。 比如:两个同学的总成...

2017-09-21 14:51:15

阅读数 356

评论数 0

红黑树(RBT)和平衡二叉树(AVL)

二者都二叉排序树的一种(关于二叉排序树的特征这里不再赘述)。 AVL是严格高度平衡的二叉排序树(平衡二叉树。由前苏联的数学家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉树,根据科学家的英文名也称为AVL树) RBT是非严格平衡的二叉平衡树 下面来阐述一下AVL和RBT...

2017-09-20 15:27:14

阅读数 213

评论数 0

ArrayList添加元素流程

平时在很频繁使用ArrayList这个类进行数组的创建、操作、销毁,但是很少到源码里一探究竟,今儿个就用流程图来表示一下。 首先上代码片段如下: List list = new ArrayList<>(); list.add("This is a demo!")...

2017-09-18 16:21:06

阅读数 1963

评论数 0

java自动装箱|拆箱解密

首先我们来认识一下装箱,在我们平时代码里随处可见,只是你没有留意到罢了(准确来说是JDK没让你注意到),对于代码片段:Double d = 12d; 来说,这是我们写的java代码,还没有进行过编译,在jvm中运行前,编译器会做什么什么事呢,通过反编译工具我们可以看到其class文件内容: Dou...

2017-09-18 14:28:16

阅读数 278

评论数 0

看似普通的方式equals

我们知道,每个类都一个equals方法,或者是从基类Object那里继承过来的,或者是自己实现的,而且实现多样。 这里来看一下String这个在java里使用最多且没有之一的类里的equals方法是如何实现这个equals方法的。 首先上一小段代码: String a = new String(&...

2017-09-18 11:38:46

阅读数 262

评论数 0

二叉树:实现java操作二叉排序树(生成、插入、遍历、删除)

首先来了解一下二叉排序树的由来,也就是在什么情况下迫使老一辈头脑风暴的科学家发明使用这种方法。 先说普通顺序存储(注意并不是有序),先来先坐,有点类似于“栈”。插入数据直接放到最末尾,删除中间数据的话可以把待删除数据和最后一位数据进行互换,也可以把待删除数据后的全部数据统一往前挪一位。这里实在没有...

2017-09-14 14:24:00

阅读数 347

评论数 0

有序表查询之四:查询实现总结

对于折半查找与插值查找,二者孰优孰劣,已经在该有序表查询的系列一种进行了阐述,二者可谓打个平手不分伯仲。 在回到斐波那契与折半查找二者身上,平均来说,斐波那契由于折半,但是必须考虑极端情况,也就是当要查找的值为数组下标起始或者结束位置时,斐波那契反而略输折半一筹,这也是能预见的结果。 那么对于...

2017-09-12 18:49:04

阅读数 131

评论数 0

有序表查询之二:java实现插值查询

插值查询是以二分查询优化方案的身份存在的。 从字(词)典查找“阿”或者“zip”,相信不会有人会从正中间开始查吧,而是直接翻到接近这个词在字典中的大致页数。 比如在一个有序的从小到大并且数值均匀分布的数组中查询一个接近数组最大边界处的比较大数的数时,我们首先想到就是从数组下标大的大方开始查...

2017-09-12 15:33:17

阅读数 291

评论数 0

有序表查询之三:java实现斐波那契查询

前边分别介绍了有序表的前两种查找方式二分查找和插值查找,这里再对其另一种方式进行java实现:斐波那契查询。 直接上代码,其中数组扩容和将不满的数值补全是为了防止下标越界异常,当查询的数是有序数组中最后一个值时,在第二个实现查找功能的while循环中的第二次循环时就会发现数组越界,所以这里进行“...

2017-09-12 15:10:30

阅读数 132

评论数 0

有序表查询之一:java实现整型数组二分查找

引言:要从杂乱无章随意堆放的物品中找到目标可能不是一件容易的事,但是有规律可循的实物中,我们总是能通过一定的手段快速“悠闲地”找到我们想要的东西。比如从一本字典中可以快速查找到我们要查询的汉字或者单词。 这里就引申出来一种有序性。这种有序性可以是按照数字方式由大到小、由小到大,或者可以按照字母...

2017-09-11 18:34:48

阅读数 247

评论数 0

java消息中间件之二:spring集成JMS连接ActiveMQ

首先来认识一下spring封装好的JMS的接口:ConnectionFactory、JmsTemplate、MessageListener。其中ConnectionFactory是spring提供的,并不是JMS规范中那个的ConnectionFactory。 1)、ConnectionFa...

2017-09-11 11:33:41

阅读数 300

评论数 0

java消息中间件之零点九:概述

java消息中间件之一:队列模式与主题模式 所谓消息中间件,单从字面上就不难理解:关注数据的发送和接受,利用高效可靠的异步消息传递机制集成了分布式系统。 异步,意味着发送者并不要求立即收到响应,而且也不会阻塞整个流程。响应可有可无,发送者总会执行剩下的任务。 总的来说,上述...

2017-09-11 09:16:03

阅读数 191

评论数 0

java消息中间件之一:队列模式与主题模式

首先,需要理解什么是队列和主题模式以及二者的区别,然后根据需要来应用到特定场景。MS规范:Java消息服务(Java Message Service),是一个Java平台中关于面向消息的中间件的API,用于两个应用程序之间或者分布式 系统中发布消息,进行异步通信。JMS相关概念: 提供者 : 实现...

2017-09-10 02:46:59

阅读数 444

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭