![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
故渊~
这个作者很懒,什么都没留下…
展开
-
搜索二叉树
查找若根节点不为空:如果根节点key==查找key 返回true如果根节点key > 查找key 在其左子树查找如果根节点key < 查找key 在其右子树查找否则 返回false插入在二叉搜索树插入新元素时,必须先检测该元素是否在树中已经存在。如果已经存在,则不进行插入;否则将新元素插入到搜索停止的地方。插入的具体过程:1.树为空,则直接插入如果是空树,直接插入,...原创 2018-09-19 16:00:38 · 166 阅读 · 0 评论 -
归并排序讲解及代码实现
基本思想将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程称为二路归并int array[] = {21, 25, 49, 25, 16, 8, 31, 41};代码实现void _MergeSort(int *a, int left, int right, int *tmp){ if (left &gt;= righ...原创 2019-03-04 16:16:29 · 3758 阅读 · 2 评论 -
快速排序讲解及代码实现
基本思想快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。代码实现第一种方法:左右指针法1.begin从最左边开始,end从最右边开始,用三数取中法设置...原创 2019-03-04 16:04:38 · 242 阅读 · 0 评论 -
冒泡排序讲解及代码实现
基本思想思路:将相邻两个数进行比较然后交换,一趟冒泡可以将最大的数放在最后。代码实现void BubbleSort(int* array, size_t n) //冒泡排序{ int i, j = 0; int temp = 0; for (i = 0; i &lt; n; i++) { for (j = i + 1; j &lt; n; ...原创 2019-03-04 15:13:50 · 288 阅读 · 0 评论 -
堆排序讲解及代码实现
基本思想创建堆:升序—&gt;大堆,降序—&gt;小堆执行如下步骤,直到数组为空:把堆顶array[0]元素和当前最堆的最后一个元素交换堆元素个数减1由于第1步后根节点不再满足最堆定义,向下调整根结点代码实现void HeapAdjustDown(int* array, size_t n,int parent) //向下调整{ int temp = 0; in...原创 2019-03-04 15:06:44 · 791 阅读 · 0 评论 -
直接选择排序讲解及代码实现
基本思想每一趟(第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选出关键码最小的数据元素,作为有序元素序列的第i个元素。待到第n-2趟做完,待排序元素集合中只剩下1个元素,排序结束。在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array...原创 2019-03-04 14:47:34 · 632 阅读 · 0 评论 -
希尔排序讲解及代码实现
基本思想希尔排序可以理解为直接插入排序的优化对于数据量大及数据逆序相对直接插入排序效率高:分为两步:1.预排序:使数据接近有序,大的数据尽量向后移动,小的数据尽量向前移动2.当gap=1时,即为直接插入排序,gap与数组大小有关代码实现void HillSort(int* array, size_t n) //希尔排序{ assert(array); int end...原创 2019-03-04 14:37:54 · 365 阅读 · 0 评论 -
常见排序算法讲解(代码实现、时间复杂度及稳定性)
排序排序:就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。排序码:通常数据元素有多个属性域可用来区分元素,作为排序依据,该域即为排序码。其中有一个属性域可用来区分元按照主排序码进行排序,排序的结果是唯一的。按照次排序码进行排序,排序的结果可能是不唯一的。排序算法稳定性如果在元素序列中有两个元素R[i]和R[j],它们的排序码K[i]== k[j],且在排序之前,元素R[i]在...原创 2019-03-04 13:25:25 · 272 阅读 · 0 评论 -
直接插入排序讲解及代码实现
基本思想每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。当插入第i(i&amp;gt;=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后...原创 2019-03-04 13:17:57 · 13125 阅读 · 4 评论 -
二叉树的各种遍历详解--递归/非递归代码实现
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次,且仅被访问一次。二叉树的遍历方式常用的有四种:前序遍历、中序遍历、后序遍历和层序遍历。前序遍历前序遍历:简单来说就是:根->左->右。规则:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。递归实现://先序遍历,递归法void PrevO...原创 2019-04-21 17:57:30 · 441 阅读 · 1 评论