![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
独L无二
一位颇为清高的女程序媛
展开
-
算法学习思维导图收藏
原创 2019-08-19 15:55:11 · 500 阅读 · 0 评论 -
超赞常见排序算法图解
常见排序算法及其时间复杂度一、内部排序: 在一个排序工作的执行过程中,如果待排序的记录全部保存在内存,这种工作就称为内排序;针对外存(磁盘、磁带等)数据的排序工作称为外排序。内排序中的归并排序算法是大多数外排序算法的基础。 在考虑算法时,最基本的问题是其时间和空间复杂度。为了在某种合理的抽象层次上考虑它们的时间复杂度和空间复杂度,需要确定关注的基本操作,以其作为时间单位,时间复杂性反映排序过程中这个(或这些)操作的执行次数。还需确定某种抽象的空间单位。 现在要做的是数据记录排序,而且基于关转载 2020-08-26 17:03:21 · 717 阅读 · 0 评论 -
十种排序算法总结
排序方式 排序算法 稳定性 平均时间复杂度 空间复杂度 插入排序 直接插入排序 稳定 O(n2) O(1) 希尔排序 不稳定 O(nlogn) O(1) 选择排序 直接选择排序 不稳定 O(n2) O(1) 堆排序 不稳定 O(nlogn) O(1) 交换排序 冒泡排序 稳定 O(n2...原创 2020-08-07 19:44:32 · 396 阅读 · 0 评论 -
什么是桶排序?
桶排序也是分配排序的一种,但其是基于比较排序的,这也是与基数排序最大的区别所在。思想:桶排序算法想法类似于散列表。首先要假设待排序的元素输入符合某种均匀分布,例如数据均匀分布在[ 0,1)区间上,则可将此区间划分为10个小区间,称为桶,对散布到同一个桶中的元素再排序。要求:待排序数长度一致。排序过程:(1)设置一个定量的数组当作空桶子;(2)寻访序列,并且把记录一个一个放到对应的桶子去;(3)对每个不是空的桶子进行排序。(4)从不是空的桶子里把项目再放回原来的序列中。#...原创 2020-08-07 18:44:53 · 13786 阅读 · 4 评论 -
什么是基数排序?
基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63, 616},它的示意图如下:在上图中,首先将所有待比较树脂统一为统一位数长度,接着从最低位开始,依次进行排序。按照个原创 2020-08-07 18:10:39 · 12987 阅读 · 1 评论 -
什么是计数排序?
计数排序(Count Sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。计数排序的思想是在给定的一组序列中,先找出该序列中的最大值和最小值,从而确定需要开辟多大的辅助空间,每一个数在对应的辅助空间中都有唯一的下标。找出序列中最大值和最小值,开辟Max-Min+1的辅助空间 最小的数对应下标为0的位置,遇到一个数就给对应下标处的值+1,。原创 2020-08-07 16:48:05 · 2674 阅读 · 0 评论 -
什么是归并排序?
归并排序是一种效率较高的排序方法,它分为拆分和合并两大部分,先拆后合。拆分,就是将一堆无序的数拆成单个,方便合并。合并,就是将拆分好的数按照排序规则再拼凑起来。详细解释请看下图:拆分:合并:看完这两幅图你应该明白了,归并排序原来就是将一堆数字分开,再合成有序的数列其实,这就是分治的思想,将大问题化小问题,将每个最小的问题处理好,合并起来大问题也就处理好了~#include <iostream>using namespace std;void merg.原创 2020-08-07 16:15:39 · 4135 阅读 · 0 评论 -
什么是堆排序?
开门见山,本文讲述堆排序。就我自身对于排序的了解来看,其实堆排序是诸多排序中最难写的,光是理解起来都有点费劲,本文旨在于用通俗易懂的话,把堆排序娓娓道来。下面,开始!1:堆毫无疑问,排序两个字没必要去死磕,这里的重点,在于排序的方式,堆排序,就是以堆的形式去排序,毫无疑问,了解堆很重要。那么,什么是堆呢?这里,必须引入一个完全二叉树的概念,然后过渡到堆的概念。上图,就是一个完全二叉树,其特点在于:从作为第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方;转载 2020-08-07 14:15:43 · 7213 阅读 · 1 评论 -
十种排序算法
1.常见算法分类十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入排序和希尔排序)、选择类排序(简单选择排序和堆排序)、归并排序(二路归并排序和多路归并排序);(2)线性时间非比较类排序:计数排序、基数排序和桶排序。总结:(1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反。(2)线性时间非比较类排序一...转载 2020-08-06 21:26:16 · 257 阅读 · 0 评论 -
查找算法总结
分类 增强/改进 进一步增强 备注 顺序查找 分块查找 分块查找实际上是对顺序查找的改进 二分查找 插值查找 所有二分查找必须数组有序,插值 查找和斐波那契查找都是改进怎么计算mid上 斐波那契查找 树表查找 二叉查找树 平衡查找树 2-3树 不太容易实现 红黑树 应用广泛,比如JDK里面的hashMap/...原创 2020-08-06 18:42:33 · 239 阅读 · 0 评论 -
七大查找算法
查找0、查找算法说明查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。0.1 查找的定义根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。0.2 查找算法分类静态查找和动态查找;静态或者动态都是针对查找表而言的;...转载 2020-08-06 14:54:52 · 717 阅读 · 0 评论 -
哈夫曼树&算法&编码
哈夫曼树哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1L1+W2L2+W3L3+…+WnLn),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,…n)。可以证明哈夫曼树的WPL是最小的。哈夫曼算法原理: 1.为每个符号建立一个叶子节点,并加上其相应的发生频率原创 2020-08-06 09:31:23 · 3281 阅读 · 0 评论 -
满二叉树 Vs 完全二叉树
满二叉树如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。图 2 满二叉树示意图如图 2 所示就是一棵满二叉树。满二叉树除了满足普通二叉树的性质,还具有以下性质:满二叉树中第 i 层的节点数为 2n-1 个。 深度为 k 的满二叉树必有 2k-1 个节点 ,叶子数为 2k-1。 满二叉树中不存在度为 1 的节点,每一个分支点中都两棵深度相同的子树,且叶子节点都在最底层。 具有 n 个节点的满二叉树的深度为 log2(n+1)。完全二叉树如果二叉树中除去原创 2020-08-05 18:46:22 · 291 阅读 · 0 评论 -
什么是十字链表?
十字链表是一种存储稀疏矩阵的方法,该存储方式采用的是 "链表+数组" 结构,如图 1 所示。图 1 十字链表示意图可以看到,使用十字链表压缩存储稀疏矩阵时,矩阵中的各行各列都各用一各链表存储,与此同时,所有行链表的表头存储到一个数组(rhead),所有列链表的表头存储到另一个数组(chead)中。因此,各个链表中节点的结构应如图 2 所示:图 2 十字链表的节点结构两个指针域分别用于链接所在行的下一个元素以及所在列的下一个元素。链表中节点的代码可以表示为:typede.原创 2020-08-05 18:05:15 · 16535 阅读 · 1 评论 -
KMP算法
简介 KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。提取加速匹配的信息 上面说道 KMP 算法主要是通过消除主串指针的回溯来提高匹配的效率的,那么,它是则呢样来消除回溯的呢?就是因为它提取并运用了加速匹配的信息! 这种信息就是对于每模式串转载 2020-08-05 17:10:59 · 193 阅读 · 0 评论 -
理解 B 树、B+ 树特点及使用场景
本文详细讲解B树、B-树、B+树、B*树的原理,通过参照网络资源整理编写1. B树B树也就是最基本的二叉搜索树,只不过换了个名字而已。每个非叶子节点最多只能存放两个孩子,其中节点的左孩子一定比该节点小,右孩子一定比该节点大,搜索节点在时间效率上是与二分查找是等价的(根节点左右孩子总数目差不多的情况下)。它与二分查找的优点是,在进行增删操作时,不需要移动大段的内存数据,通常是常数开销。2. B-树性质:是一种多路搜索树(非二叉结构):1.任意非叶子节点最多有M个孩子,且M>2;.转载 2020-08-04 17:13:54 · 2152 阅读 · 0 评论 -
八大基本数据结构
数据结构分类 1、数组 2、栈 3、队列 4、链表 5、树 6、散列表 7、堆 8、图数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。1、数组数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面.转载 2020-08-04 16:26:14 · 3946 阅读 · 0 评论 -
数据结构相关的资料整理
《数据结构与算法教程》http://data.biancheng.net/原创 2020-08-04 16:15:16 · 206 阅读 · 0 评论 -
字典树Trie
一、什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图:上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质: 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。 ...转载 2019-10-28 16:24:04 · 125 阅读 · 0 评论 -
红黑树
维基百科关于红黑树的讲解,非常之详细。红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",它现代的名字源于Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文。红黑树的结构复杂,但它的操作有着良好的最坏情况运行时间,并且在实践中...原创 2019-06-18 15:27:17 · 100 阅读 · 0 评论