摘要: 二分搜索树是为了快速查找而生,它是一颗二叉树,每一个节点只有一个元素(值或键值对),左子树所有节点的值均小于父节点的值,右子树所有的值均大于父节点的值,左右子树也是一颗二分搜索树,而且没有键值相等的节点。它的查找、插入和删除的时间复杂度都与树高成比例,期望值是O(log n)。 但是插入数组如[], 阅读全文
posted @ 2020-01-23 12:49 我脱下短袖 阅读(619) 评论(0) 推荐(1) 编辑
摘要: 创建与输入数组相等长度的新数组,作为直接寻址表。两数之和的期望是Target,将Target依次减输入数组的元素,得到的值和直接寻址表比较,如果寻址表存在这个值则返回;如果不存在这个值则将输入数组中的元素插入寻址表,再进行输入数组中的下一个元素。 再进一步优化可以将输入数组直接作为直接寻址表,控制对 阅读全文
posted @ 2020-01-20 12:29 我脱下短袖 阅读(582) 评论(0) 推荐(1) 编辑
摘要: 画了一系列树的动画,从二分搜索树,到AVL树,再到2 3树,再到基于2 3树的红黑树,都可以发现这些树都跟二叉查找树很像啊。 嘿嘿!二分搜索树就是二叉查找树;AVL树也是一颗二分搜索树,只多了高度差的限制;2 3树虽满足二分搜索树的性质,但不是一颗二分搜索树,2 3树由2 节点和3 节点组成的,满足 阅读全文
posted @ 2020-01-11 16:10 我脱下短袖 阅读(533) 评论(0) 推荐(1) 编辑
摘要: 回顾一下我们学过的选择排序,在无序区找到一个最小(大)的元素需要比较n 1次,找到第二小的元素需要比较n 2次,直到最后比较1次。而堆排序因为二叉堆的性质,堆顶就是最大的元素,查找次数只有一次,但是将无序转成有序中间还需要一个预处理过程:构造堆有序。 堆有序并不代表数组有序,堆有序是满足二叉堆性质的 阅读全文
posted @ 2019-12-19 15:41 我脱下短袖 阅读(1106) 评论(0) 推荐(3) 编辑
摘要: 二叉堆的解释 (动态选择优先级最高的任务执行) 堆,又称为优先队列。虽然名为优先队列,但堆并不是队列。堆和队列是两种不同的数据结构,堆是树态的,队列是线性的。在队列中,我们可以向队列添加元素,取出的时候是按照进入队列的先后顺序取出元素的,先进先出;而在堆中,却不是按照元素添加的先后顺序,而是按照元素 阅读全文
posted @ 2019-12-17 13:33 我脱下短袖 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 二分搜索树属性 二分搜索树的又名比较多,有的叫二叉排序树,也有的叫二叉查找树,或者有序二叉查找树。是指一棵空树或者具有下列性质的二叉树: 1.若任意节点的左子树不空,则左子树所有节点的值均小于它根节点的值; 2.若任意节点的右子树不空,则右子树所有节点的值均小于它根节点的值; 3.任意节点的左、右子 阅读全文
posted @ 2019-12-17 13:27 我脱下短袖 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 简单选择排序属性 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 回顾一下上次快速排序的 阅读全文
posted @ 2019-12-17 13:25 我脱下短袖 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 希尔排序属性 上篇写的直接插入排序算法时间复杂度是O(n^2),如果要令此排序算法的时间复杂度要低于O(n^2),必须是“远距离的元素交换”使得这组元素能提高有序的程度,然后进行直接插入排序的时候可以减少交换的工作量。 那通过什么减少交换的工作量呢?希尔排序可以解决这个问题。 希尔排序在做直接插入排 阅读全文
posted @ 2019-12-17 13:04 我脱下短袖 阅读(1180) 评论(0) 推荐(1) 编辑
摘要: 插入排序 插入排序是比较简单也比较直接的一种排序算法。它是从一堆数据中取出一个数据并将它插入到已排序的数据中合适的位置。 比如按身高排队,有一个人指挥排队从第二个人开始,按身高把当前的人安插到之前排序好队的合适的位置。 或者打扑克牌,假设我们拿到了10,J,K,A这四张牌,然后拿到了Q这张牌,那如何 阅读全文
posted @ 2019-12-17 12:52 我脱下短袖 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。 鸡尾酒排序算法 鸡尾酒排序的思想有点像摆钟一样,从左到右,又从右到左。而冒泡排序只是单向执行。 鸡尾酒排序也是交换排序,假设做一个升序排序,先从左到右,交换一趟把最大的数放置右边,然后从右到左,把 阅读全文
posted @ 2019-12-08 00:17 我脱下短袖 阅读(319) 评论(0) 推荐(0) 编辑