05 2020 档案

摘要:一、快速排序和归并排序的比较 相同点: 都采用的分治的思想,都是将数组进行切分排序。 不同点: 1). 归并排序是将数组分成两个子数组,然后对两个子数组进行排序,然后将两个有序的子数组归并,从而将整个数组进行排序。快速排序是当两个子数组有序的时候,整个数组自然就有序了。 2). 归并排序将数组等分两 阅读全文
posted @ 2020-05-27 18:14 灰色飘零 阅读(412) 评论(0) 推荐(0)
摘要:一、排序原理 快速排序是对冒泡排序的一种改进。基本的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的数据要小,然后按照此方法对这两部分的数据分别进行快速排序,排序过程递归进行,以此达到整个数据都变成有序序列。 具体的排序步骤如下: 首先设定一个分界值,通过该 阅读全文
posted @ 2020-05-27 10:38 灰色飘零 阅读(160) 评论(0) 推荐(0)
摘要:一、排序原理 核心思想是 递归 + 分&治。 归并排序的原理可以概况为以下三步骤: 1.尽可能的将一组数据拆分成两个元素相等的子组,并对每一个子组继续进行拆分,直到拆分后的每个子组的元素个数都为1为止。 2.将相邻的子组合并为一个有序的大组。 3.不断重复步骤2,直到最终只有一个组为止。 二、排序实 阅读全文
posted @ 2020-05-24 14:47 灰色飘零 阅读(189) 评论(0) 推荐(0)
摘要:一、排序原理 希尔排序是插入排序的一种,又称为‘缩小增量排序’,是插入排序算法的一种更高效的改进版本。 1. 选定一个增长量h,按照增长量h对数据进行分组。 2. 对分好的每一组数据完成插入排序。 3. 减少增长量,最小减为1,重复第二步操作。 增长量h的确定规则:增长量h的值为一固定的规则,我们采 阅读全文
posted @ 2020-05-17 09:47 灰色飘零 阅读(669) 评论(0) 推荐(0)
摘要:一、排序原理 1. 把所有的元素分为两组,已排序的和未排序的。 2. 找到未排序数组的第一个元素,向已排序的数组中插入。 3. 倒序遍历已排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他元素向后移动一位。 二、代码实现 import j 阅读全文
posted @ 2020-05-15 16:44 灰色飘零 阅读(104) 评论(0) 推荐(0)
摘要:一、CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 阅读全文
posted @ 2020-05-15 11:33 灰色飘零 阅读(2226) 评论(0) 推荐(0)
摘要:一、排序原理 1. 每一次遍历的过程中,都假定第一个索引处的值都是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某处索引处的值,则假定某个索引处的值为最小值,最后可以找到最小值所在的索引。 2. 交换第一个索引和最小值所在索引处的值。 二、代码实现 import java.util 阅读全文
posted @ 2020-05-14 17:50 灰色飘零 阅读(124) 评论(0) 推荐(0)
摘要:一、冒泡排序介绍 冒泡排序的算法是最经典的排序算法。 根据上图,我们可以总结排序原理如下: 1. 比较相邻的元素,如果前一个元素比后一个大,就交换这两个元素的位置。 2. 对每一对儿相邻的元素做同样的操作,从第一对元素到结尾的最后一对元素,最终最后位置的元素就是最大值。 二、冒泡排序代码实现 imp 阅读全文
posted @ 2020-05-12 15:14 灰色飘零 阅读(251) 评论(0) 推荐(0)
摘要:在计算核心操作次数的时候,随着输入规模的增大,我们可以设定以下规则: 算法函数中的常熟可以忽略; 算法函数中的最高次幂的常数因子可以忽略; 算法函数中最高次幂越小,算法效率越高。 我们分析一个算法的运行时间,最重要的就是把核心操作的次数和输入规模关联起来。可以结合如下图进行理解: 一、算法的时间复杂 阅读全文
posted @ 2020-05-05 22:36 灰色飘零 阅读(462) 评论(0) 推荐(0)
摘要:/** * 堆排序 */ public class HeapSort { public static void main(String[] args) { String[] arr = {"S", "O", "R", "T", "E", "X", "A", "M", "P", "L", "E"}; 阅读全文
posted @ 2020-05-04 16:08 灰色飘零 阅读(191) 评论(0) 推荐(0)
摘要:区别于之前我们实现的基于链表实现的二叉查找树,堆是完全二叉树的数组对象。 堆的特性: 1. 它是完全二叉树,除了树的最后一层结点是不需要是满的,其他的每一层从左往右都是满的,如果最后一层结点不是满的,那么要求左满右不满。 2. 它通常用数组实现,其结构如下图: 如果一个结点的位置为k,则它的父节点的 阅读全文
posted @ 2020-05-04 12:18 灰色飘零 阅读(527) 评论(0) 推荐(0)
摘要:【需求】 请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。 请从上到下计算出所有折痕的⽅向。 给定折的次数n,请返回从上到下 阅读全文
posted @ 2020-05-03 20:47 灰色飘零 阅读(274) 评论(0) 推荐(0)
摘要:在 二叉树实战(二) - 二叉树的遍历方式 和 二叉树实战(三) - 二叉树层序遍历方式(广度优先遍历) 中,我们知道了如何对树进行广度优先遍历和深度优先遍历。 这里我们在之前的基础上再实现以下二叉树的最大深度的计算: public int maxDepth() { return maxDepth( 阅读全文
posted @ 2020-05-03 19:35 灰色飘零 阅读(88) 评论(0) 推荐(0)
摘要:在 实战 - 二叉树的遍历方式 里面我们实践了遍历的方式,主要包括 前序遍历、中序遍历、后续遍历。这三种方式都属于深度优先遍历方式。 今天我们实战一下广度优先遍历的方式 - 层序遍历。 public Queue<Key> layerErgodic() { ConcurrentLinkedQueue< 阅读全文
posted @ 2020-05-03 17:57 灰色飘零 阅读(156) 评论(0) 推荐(0)
摘要:二叉树的遍历方式分为三种, 根据根节点的访问时机,定义以下三种方式: 1). 前序遍历 先访问跟结点,再访问左子树,最后访问右子树。 2). 中序遍历 先访问左子树,再访问根结点,最后访问右子树。 3). 后序遍历 先访问左子树,再访问右子树,最后访问根结点。 在二叉查找树的代码基础上实现遍历以上遍 阅读全文
posted @ 2020-05-03 16:29 灰色飘零 阅读(99) 评论(0) 推荐(0)
摘要:/** * 二叉查找树 * * @param <Key> * @param <Value> */ public class BinaryTree<Key extends Comparable<Key>, Value> { /************************************** 阅读全文
posted @ 2020-05-03 12:01 灰色飘零 阅读(397) 评论(0) 推荐(0)