
数据结构与算法
数据结构与算法
黑暗主宰
这个作者很懒,什么都没留下…
展开
-
二叉树的前序、中序和后序遍历(递归和非递归的方法)
二叉树的前序、中序和后序遍历(递归和非递归的方法)二叉树的基础概念二叉树: 是每个节点最多只有两个分支的树结构。通常分支被称为”左子树“和”右子树“。二叉树的分支具有左右次序,不能随意颠倒。下图是一棵二叉树二叉树还有如下的性质:二叉树的第 iii 层至多有 2i−12^{i-1}2i−1 个节点深度为 kkk 的二叉树至多有 2k−12^k-12k−1 个节点一颗含有 nnn 个...原创 2020-02-06 20:09:21 · 14213 阅读 · 1 评论 -
桶排序
桶排序算法思想桶排序是计数排序(计数排序实现点这里)的一种改进和推广,其核心思想是把给定的数据分布到有限数量的桶里,每个桶再分别排序,最后把各个桶里排好序的数字合并在一起。算法步骤:设置一定数量的桶(即定义一定数量的数组,存储数据)遍历待排序的数组,把每个数据放入对应的桶里对非空的桶进行排序把非空的排好序的桶合并起来举个例子:arr=[29,25,3,49,9,37,21,43...原创 2020-02-03 18:01:29 · 1680 阅读 · 0 评论 -
计数排序
计数排序算法思想计数排序是一种基于非比较的一种排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中,计数排序要求输入的数据必须有明确的范围。算法步骤:查找数组中的最大数和最小数根据最大数和最小数生额外的辅助数组(max-min+1)在辅助数组对应位置记录原数组每个数字出现的次数根据辅助数组调整原始数组举个简单的例子 arr = [2,0,-2,-1,3,1,3...原创 2020-02-03 15:09:14 · 1411 阅读 · 0 评论 -
堆排序
堆排序预备知识**满二叉树:**除最后一层结点均无任何子节点外,每一层的所有结点都有两个子结点的树。也就是每一层节点个数都是最大值的二叉树(每层kkk的节点个数=2k−12^{k-1}2k−1),也可以说除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。**完全二叉树:**如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被...原创 2020-02-03 10:34:26 · 3028 阅读 · 0 评论 -
快速排序
快速排序算法思想快速排序的基本思想:选择一个数字作为基准数字,比这个数字大的放在右边,小于等于这个数字的放在左边;然后就可以分成两个子序列,对于每个子序列进行同样的操作,直到整个序列是有序的。算法步骤:从序列中挑出一个数字作为基准(pivot);将给定的序列按照选定的基准分成两个子序列,小于等于基准的放在左侧,大于基准的放在右侧;对于每个子序列采用递归的操作,重复1~2步骤,直到子序...原创 2020-02-01 11:42:00 · 3038 阅读 · 2 评论 -
选择排序
选择排序算法思想选择排序是一种比较直观的排序算法,选择排序的工作原理是每次从待排序的数据中选择最小的数字放在当前位置,然后向前前进一个位置,把剩余数据的最小的数字放在现在的位置,依次类推,直到待排序的数据的数量为零。(升序的排列思想)算法步骤:设置当前位置的下标为最小的数字在待排序的数据中,选择最小的下标(与当前设置最小数字作比较)交换当前位置元素和最小下标的元素数据位置向前进一步...原创 2020-01-29 20:24:43 · 2379 阅读 · 0 评论 -
插入排序
插入排序算法思想插入排序是一个特别好理解的排序算法,这里举一个打牌的例子说明一个工作原理。在开始摸牌的时候,我们手里是没有扑克牌的,当摸第一个张牌的时候,我们先放在手里,当有第二张牌的时候,当它比我们手里的牌大,就放在右边,当比手里的牌小就放在左边,即升序排序(当然也可以降序);当第三张牌的时候,就选择合适的位置查进去,使得手里的牌是有序的。那么当整个扑克摸完的时候,我们手里的牌也是有序的。排...原创 2020-01-29 17:13:43 · 2131 阅读 · 0 评论 -
冒泡排序
冒泡排序算法思想冒泡排序是最简单的排序算法之一,在给定的序列中,依次的比较两个数字,如果顺序错误就交换两个数字的位置。然后重复步骤,直到整个给定的序列符合要求位置。算法步骤:比较相邻的两个数字,如果第一个比第二个数字大,那么交换两个数字的位置;否则,继续下一个位置的比较对每一对相邻的元素做同样的工作,遍历完整个序列以后,最后的数字一定是最大的数字针对所有的数字,重复以上步骤,除了最后...原创 2020-01-29 15:12:41 · 1802 阅读 · 0 评论 -
归并排序
归并排序归并排序: 归并排序采用的是分治算法的思想,先把这个要排序的数组划分为两份,然后再把子数组再次二分,直到数组的大小为1;然后从低端开始向上合并,合并的过程对每一个子数组进行排序。可以通过下面的分解图观察归并算法的流程归并排序是一种稳定的排序算法,相对其他排序算法而言,是一种速度比较快的算法,时间复杂度为 O(n×log(n))O(n \times log(n))O(n×log(n))...原创 2020-01-21 20:04:09 · 4326 阅读 · 1 评论 -
数据结构--树
树(二叉树)的基本概念编程语言:python作者:黑暗主宰邮箱:shengzhanhe@gmail.com文章目录数据结构--树树的概念相关术语二叉树二叉树的遍历代码实现树的遍历数据结构–树树的概念树是一种非线性的数据结构,是由n(n>=0)n(n >=0)n(n>=0)个结点组成的有限集合;它是一种类似于链表的数据结构,不过链表的结点是以线性方式简...原创 2019-07-24 21:03:50 · 544 阅读 · 2 评论 -
Leetcode--删除链表节点
Leetcode–删除链表中的节点删除链表中的节点,包括leetcode19和leetcode237编程语言:python作者:黑暗主宰邮箱:shengzhanhe@gmail.com文章目录Leetcode-删除链表中的节点题目描述解题思路Leetcode-删除链表中的节点题目描述原题链接: 237. 删除链表中的节点 19. 删除链表的倒数第N个节点题目描述:...原创 2019-07-29 21:25:03 · 516 阅读 · 4 评论