随笔分类 - 数据结构和算法
摘要:先贴一些二叉树的基础吧,红黑树和AVL树等这些东西不是凭空产生的,必须从二叉树开始理解和发展: 一、二叉树 不需要太多说明,仅列举一些名词和性质: 度:结点孩子个数 树的高度:根结点到叶结点的简单路径和(的最大值) 结点的深度:结点到根节点的简单路径和 树的度为所有结点度的大值,二叉树的度为2。 树
阅读全文
摘要:堆排序是利用最大堆的性质将堆顶元素与数组末尾元素互换,然后重新将剩下的HeapSize-1部分的数组维护为最大堆的过程。 首先我们需要知道什么是堆,以及最大堆和最小堆等。 堆是数组,可以被看做是一颗完全二叉树(即任意两个叶子节点的深度相差不超过1且其排列与满二叉树契合),反过来我们也可以说堆是一个完
阅读全文
摘要:归并排序和快排都是时间复杂度为n*logn的排序算法,都较好的的利用了分治思想,因此放在一起描述。 上图是我比较喜欢的一副展示归并和快排的示意图,我们可以通过递归来实现上述两个排序算法。 先来说归并排序: 归并排序的本质就是将要排序的数组一层一层的拆分为直到长度为1的单元素数组然后进行逐层归并。 通
阅读全文
摘要:这三种排序之所以放到一起说,是因为他们都比较基础,其最差时间复杂度皆为O(n²),空间复杂度皆为O(1)。 最差时间复杂度为O(n²)并不意味着他们就一定比快排、归并等排序算法差,因为时间复杂度只是一个理论相关值,实际排序的耗时和数组规模、数组的有序程度以及 比较/交换次数 都有关系。 鉴于算法较为
阅读全文