![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构&算法
文章平均质量分 74
数组、字符串、列表、链表、队列、栈、树
星光之子0317
这个作者很懒,什么都没留下…
展开
-
排序算法-快速排序
排序算法-快速排序算法思想和归并排序的区别算法实现算法效率时间复杂度空间复杂度算法思想快速排序是一种分治的排序算法它将一个数组分成两个子数组,将两部分独立地排序每趟排序时(先)选出一个基准值,然后 将所有元素 与该基准值 比较,并按大小分成左右两堆,然后递归执行该过程,直到所有元素都完成排序先从数列中取出一个数作为基准数分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边再对左右区间重复第二步,直到各区间只有一个数和归并排序的区别快速排序和归并排序是互补的归并排序原创 2022-05-22 22:55:37 · 372 阅读 · 0 评论 -
排序算法-冒泡排序
排序算法-冒泡排序算法思想算法实现算法效率时间复杂度空间复杂度算法思想相邻的元素两两比较,较大的数向后(下沉),较小的数向前(冒起来),这样一趟比较下来,最大(小)值就会排列在一端整个过程如同气泡冒起,因此被称作冒泡排序冒泡排序的步骤是比较固定的比较相邻的元素,如果第一个比第二个大,就交换他们两个每趟从第一对相邻元素开始,对每一对相邻元素作同样的工作,直到最后一对针对所有的元素重复以上的步骤,除了已排序过的元素(每趟排序后的最后一个元素),直到没有任何一对数字需要比较算法实现publi原创 2022-05-22 21:29:30 · 141 阅读 · 0 评论 -
排序算法-归并排序
排序算法-归并排序算法思想算法实现算法效率时间复杂度空间复杂度算法思想实现归并的一种直截了当的办法 是 将两个不同的有序数组 归并到 第三个数组中,两个数组中的元素应该都实现了Comparable接口实现的方法很简单,创建一个适当大小的数组 然后 将两个输入数组中的元素 一个个 从小到大 放入这个数组中但是,当用归并 将一个 大数组排序时,需要进行很多次归并,因此在每次归并时 都要创建一个新数组 来存储 排序结果会带来问题所以更希望有一种 能够在原地归并的方法,这样就可以先将前半部分排序,再将后半原创 2022-05-22 19:45:09 · 175 阅读 · 0 评论 -
排序算法-插入排序
排序算法-插入排序算法思想算法实现算法效率时间复杂度空间复杂度和选择排序比较算法思想将初始数据分为 有序部分 和 无序部分,每一步 将一个无序部分的数据 插入到 前面已经排好序的 有序部分中,直到插完所有元素为止插入排序的步骤如下:每次从无序部分中取出一个元素,与 有序部分中的元素 从后向前 依次进行比较,并找到合适的位置,将该元素插到有序组当中算法实现 public static void insertSort(int[] nums) { for (int i = 0; i原创 2022-05-19 22:34:03 · 445 阅读 · 0 评论 -
排序算法-希尔(Shell‘s)排序
排序算法-希尔排序算法思想算法实现算法效率(待完善)时间复杂度空间复杂度算法思想假设待排序元素序列有n个元素,首先 取一个整数increment(小于序列元素总数)作为间隔所有距离为increment的元素 放在同一个逻辑数组中,在每一个逻辑数组中 分别实行 直接插入排序然后缩小间隔increment,重复上述逻辑数组划分和排序工作直到最后取increment=1,将所有元素放在同一个数组中排序为止从上面的希尔排序的思想中也能看出希尔排序的实现步骤:选increment,划分逻辑分组,组内进原创 2022-05-19 23:31:43 · 132 阅读 · 0 评论 -
排序算法-选择排序
排序算法-选择排序算法思想算法实现算法效率时间效率运行时间和输入无关数据移动(次数)是最少的算法思想首先,找到数组中最小的元素其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换)再次,在剩下的数组元素中找到最小的元素,将它与数组的第二个元素交换位置如此往复,直到将整个数组排序这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者在 未排序(的)序列中找到最小(大)元素,存放到 排序序列 的 起始位置从剩余未排序(的数组)元素中继续寻找最小(大)元素,然原创 2022-05-17 00:48:17 · 162 阅读 · 0 评论 -
N叉树(N-ary Tree)
N叉树N 叉树的定义N 叉树的遍历N 叉树的经典递归解法"自顶向下"的解决方案"自底向上"的解决方案N 叉树的定义二叉树是一棵以根节点开始,每个节点含有不超过 2 个子节点的树。将这个定义扩展到 N 叉树 。 一棵以根节点开始,每个节点不超过 N 个子节点的树,称为 N叉树阅读参考:https://leetcode-cn.com/leetbook/read/n-ary-tree/x0wi57/N 叉树的遍历一棵二叉树可以按照前序、中序、后序或者层序来进行遍历。在这些遍历方法中,前序遍历、后序遍历和原创 2022-03-30 22:40:19 · 2834 阅读 · 0 评论 -
二叉搜索树
二叉搜索树概述在二叉搜索树中实现搜索、插入、删除操作总结高度平衡的二叉搜索树为什么需要用到高度平衡的二叉搜索树?如何实现一个高度平衡的二叉搜索树?高度平衡的二叉搜索树的实际应用概述二叉搜索树(BST)是二叉树的一种特殊表示形式,它满足如下特性:每个节点中的值必须大于(或等于)存储在其左侧子树中的任何值每个节点中的值必须小于(或等于)存储在其右子树中的任何值验证一个树是否是二叉搜索树:值得注意的是,对于二叉搜索树,可以通过 中序遍历 得到一个 递增的有序序列。因此,中序遍历是二叉搜索树中最常用的原创 2022-03-30 22:29:15 · 802 阅读 · 0 评论 -
二叉树(前序、中序、后序遍历)
二叉树树的遍历前序遍历中序遍历后序遍历层序遍历运用 递归 解决树的问题(重要!!!)自 顶 向 下 的解决方案自 底 向 上 的解决方案小结(重要!!!)树的遍历树 是一种经常用到的数据结构,用来模拟具有树状结构性质的数据集合。树里的每一个节点 有 一个值 和 一个 包含所有子节点的列表从图的观点来看,树也可视为一个 拥有 N 个节点 和 N-1 条边的一个有向无环图二叉树是一种更为典型的树状结构。如它名字所描述的那样,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”原创 2022-03-19 17:33:30 · 471 阅读 · 0 评论 -
哈希表、哈希集合(HashSet)、哈希映射(HashMap)
哈希表、哈希集合、哈希映射哈希表哈希表的原理哈希集合-HashSet哈希映射键 的 设计哈希表哈希表 是一种 使用 哈希函数 组织数据,以支持 快速插入和搜索 的 数据结构有两种不同类型的哈希表:哈希集合和哈希映射哈希集合 是 集合数据结构的实现之一,用于存储非重复值哈希映射 是 映射数据结构的实现之一,用于存储(key, value)键值对通过选择合适的哈希函数,哈希表可以在插入和搜索方面实现出色的性能阅读参考:https://leetcode-cn.com/leetbook/read原创 2022-03-19 17:00:29 · 3431 阅读 · 1 评论 -
队列、栈、BFS、DFS
队列、栈、BFS、DFS队列循环队列BFS-广度优先搜索节点的处理顺序队列的入队和出队顺序栈DFS-深度优先搜索节点的处理顺序栈的入栈出栈顺序DFS 和 BFS的区别队列在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素队列是一个先入先出的数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。 删除(delete)操作也被称为出队(dequeue)。 只能移除第一个元素阅读参考:https://leetcode-cn.com/leetbook/rea原创 2022-03-19 16:34:35 · 1092 阅读 · 0 评论 -
单链表、双链表
单链表、双链表单链表简介访问操作添加操作删除操作链表中的(快慢)双指针双链表简介添加操作删除操作总结(重要!!!)单链表简介阅读参考:https://leetcode-cn.com/leetbook/read/linked-list/jsumh/单链表中的每个结点不仅包含值,还包含链接到下一个结点的引用字段通过这种方式,单链表将所有结点按顺序组织起来访问操作与数组不同,无法在常量时间内O(1)访问单链表中的随机元素,如果想要获得第 i 个元素,必须从头结点逐个遍历(next)按索引来访问元素原创 2022-03-08 21:16:47 · 446 阅读 · 0 评论 -
数组和字符串
数组和字符串数组简介集合列表数组数组的操作读取元素查找元素插入元素删除元素二维数组简介字符串介绍为何单独讨论字符串类型?字符串比较字符串连接数组简介阅读参考:https://leetcode-cn.com/leetbook/read/array-and-string/ybfut/集合集合有什么特性呢?集合里的元素类型不一定相同集合里的元素没有顺序列表列表(又称线性列表)的定义为:是一种 数据项 构成的 有限序列,即 按照 一定的线性顺序,排列而成的数据项的集合列表的概念 是在 集合的特原创 2022-03-08 20:36:34 · 261 阅读 · 0 评论