![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
大圣取经:)
这个作者很懒,什么都没留下…
展开
-
平衡二叉树
平衡二叉树的左右旋转 右旋转: void R_Rotate(BiTree *p) { BiTree L; L = (*p) ->lchild; (*p) -> lchild = L-> rchild; L -> rchild = (*p); *p = L; } 左旋转: void L_Rotate(BiTree *p) { BiT原创 2016-08-05 18:56:19 · 175 阅读 · 0 评论 -
图的相关操作(构建、遍历)
图的构建(邻接矩阵):include define MAXVEX 100define INFINITY 65535typedef struct { VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes, numEdges; }MGraph;void CreateMGraph(MG原创 2016-09-03 00:04:24 · 500 阅读 · 0 评论 -
各排序算法总结
各排序算法汇总表原创 2016-09-11 23:29:38 · 351 阅读 · 0 评论 -
折半查找(二分查找)
时间复杂度为:O(logn) 原理:假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 具体实现: int bsearchWithou原创 2016-08-05 18:58:14 · 408 阅读 · 0 评论 -
插值查找
时间复杂度为:O(logn) 差值查找:根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法, 核心是公式 (key - a[low])/(a[high] - a[low]) 对于表长较大,而关键字分布比较均匀的查找表查找比折半查找好的多。 具体实现: int bsearchWithoutRecursion(intarray[],int low,int high,in原创 2016-08-05 18:57:51 · 326 阅读 · 0 评论 -
快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 1) 程序开始执行,此时low=1,high=L.length=9。第4行,我们将L.r[low]=L.r[1]=50赋值给枢轴变量pivotkey,如图9-9-1所示。 2)原创 2016-08-08 11:19:37 · 323 阅读 · 0 评论 -
归并排序
时间复杂度为:O(nlogn) 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。具体实现(c): 递归实现:include原创 2016-08-08 11:20:55 · 216 阅读 · 0 评论 -
直接插入排序
直接插入排序(straight insertion sort)的做法是: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 时间复杂度为:O(n^2) 具体实现(c):i原创 2016-08-08 11:23:02 · 279 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 具体实现(c): 将直接插入排序的增量1改为其他数值,如:inc = inc/3+1;in原创 2016-08-08 11:22:27 · 188 阅读 · 0 评论 -
优化的冒泡排序
冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 冒泡排序时间复杂度为: 最好:O(n) 最坏:O(n^2) 优化的冒泡排序原创 2016-08-08 11:23:43 · 238 阅读 · 0 评论 -
堆排序算法
9.7.2 堆排序算法 堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的次小值。如此反复执行,便能得到一个有序序列了。堆排序的时间复杂转载 2016-08-08 11:21:42 · 304 阅读 · 0 评论 -
二叉排序树
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的结点。 二叉排序树的查找算法: /* 递归查找二叉排序树T中是否存在key, */ /* 指针f指向T的双亲,其初始调用值为NULL */原创 2016-08-05 18:57:05 · 367 阅读 · 0 评论 -
树的相关操作(构建、遍历,删除)
具体实现(C):include include原创 2016-09-03 00:05:01 · 296 阅读 · 0 评论