摘要:一、引言 我们知道,java中泛型排序使用归并排序或TimSort。归并排序以O(NlogN)最坏时间运行,下面我们分析归并排序过程及分析证明时间复杂度;也会简述为什么java选择归并排序作为泛型的排序算法。 二、图解归并排序过程 算法思想:采用分治法: 分割:递归地把当前序列平均分割成两半。 集成 阅读全文
posted @ 2019-04-29 15:00 9龙 阅读 (386) 评论 (0) 编辑
摘要:一、引言二、图解堆排序(heapsort)三、java代码实现及时间复杂度分析四、总结 一、引言 优先队列可以用于以O(NlogN)时间排序,正如上一篇的求解topK问题中用到的思想一样,这种思想就是堆排序(heapsort)。 二、图解堆排序(heapsort) 算法思想:通过将数组元素进行bui 阅读全文
posted @ 2019-04-27 11:10 9龙 阅读 (186) 评论 (0) 编辑
摘要:在原来基础上增加了算法E。 一、引言 ​ 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内存。 二、普通算法 算法A: 将数组中的元素升序排序,找到数组下标k 1的元素即可。这是大家最容易想到的方法,如果使用简单排序算法,时间复杂度为O 阅读全文
posted @ 2019-04-26 22:28 9龙 阅读 (269) 评论 (0) 编辑
摘要:一、队列与优先队列的区别 队列是一种FIFO(First In First Out)先进先出的数据结构,对应于生活中的排队的场景,排在前面的人总是先通过,依次进行。 优先队列是特殊的队列,从“优先”一词,可看出有“插队现象”。比如在火车站排队进站时,就会有些比较急的人来插队,他们就在前面先通过验票。 阅读全文
posted @ 2019-04-19 22:02 9龙 阅读 (720) 评论 (0) 编辑
摘要:引言: 前面详解了如何优化冒泡排序?,图解选择排序与插入排序,这些简单排序算法平均时间复杂度都是O(n^2)。希尔排序是第一批打破二次时间屏障的算法之一。下面我们来分析为什么希尔排序可以打破二次时间复杂度。 一、分析简单排序算法的下界 逆序:具有性质i < j但 a[i] > a[j]的 阅读全文
posted @ 2019-04-16 21:06 9龙 阅读 (713) 评论 (3) 编辑
摘要:上一篇详述了冒泡排序及其优化,有兴趣的可以看看: 如何优化冒泡排序? 一、选择排序(SelectionSort) 算法思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 阅读全文
posted @ 2019-04-15 15:06 9龙 阅读 (2190) 评论 (0) 编辑
摘要:一、冒泡排序(BubbleSort) 基本思想:从左到右使用相邻两个元素进行比较,如果第一个比第二个大,则交换两个元素。这样会使较大数下沉到数组的尾端,即较小数像泡泡一样冒到数组首端。 排序过程: 比较相邻两个元素,如果第一个比第二个大,则交换两个元素; 从左到右依次比较,直到最大数位于数组尾端; 阅读全文
posted @ 2019-04-14 14:38 9龙 阅读 (489) 评论 (0) 编辑
摘要:修正前:new出来的对象,会在堆中存放真正的值; 大错特错!!!! 修正后:new出来的对象,堆存放的并不是真正的值,而是常量池中字符串常量的地址。 一、抛砖引玉 ​ 不知道大家在做面试题时是否会遇到关于String的题,记得校招时,楼主经常遇到String的题,有时候会很懵逼。先来看一个例子: p 阅读全文
posted @ 2019-04-10 18:45 9龙 阅读 (148) 评论 (0) 编辑
摘要:一、基础类型 Java 是一种强类型语言 。 这就意味着必须为每一个变量声明一种类型 : 在 Java 中,一共有 8种基本类型 ( primitive type ) , 其中有 4 种整型 、 2 种浮点类型 、 1 种用于表示 Unicode 编码 的字符单元的字符类型 char 和1 种用于表 阅读全文
posted @ 2019-04-09 15:03 9龙 阅读 (384) 评论 (0) 编辑