![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法分析-c语言描述
渴望成长的菜鸟
路漫漫其修远兮,吾将上下而求索
展开
-
一种shell排序实现
逆序对:当 i < j且a[i] > a[j]时,(a[i],a[j])就是一个逆序对事实证明,通过交换相邻元素而进行排序的任何算法平均需要O(N*N)时间,一个排序算法通过删除逆序对而达到排序目的的shell排序:它通过比较相距一定间隔的元素来达到一次可以消除多个逆序对的目的,而且间隔随着算法的进行逐渐减小,直到间 隔为1,并且由每个间隔组成的新数组...原创 2018-03-07 16:20:14 · 239 阅读 · 0 评论 -
一种左式堆实现
左式堆,是一种二叉树,但它是趋于左边极不平衡的二叉树。结构性质:趋于左边极不平衡的二叉树堆序性质:最小值在根节点上NPL:从X节点到一个没有两个儿子的节点的最短路径的长度,称为X节点的NPL特殊要求:左子树的NPL不小于右子树的NPL设计目的:合并操作效率高合并操作思想:如果两个堆中有一个为空,那么我们可以返回另外一个堆,否则,需要比较它们的根,将具有较大根值的堆与具 ...原创 2018-02-28 16:45:29 · 166 阅读 · 0 评论 -
一种堆排序实现
堆排序: 基于优先队列(二叉堆)进行的排序时间复杂度为: O(N log N)#include<stdio.h>#include<stdlib.h>struct BH_Node{ int size; int *heap; int capacity;};//分配一个二叉堆struct BH_Node *init_Binary_Heap(int capaci...原创 2018-03-09 14:31:27 · 141 阅读 · 0 评论 -
一种二叉堆实现
二叉堆结构性质:是一颗完全二叉树二叉堆堆序性质:最小元在根上,而且左右子树也一个二叉堆#include<stdio.h>#include<stdlib.h>#define ElementType intstruct binary_heap { int capacity; int size; ElementType *Elements;};struct ...原创 2018-02-22 16:20:10 · 145 阅读 · 0 评论 -
一种二项队列实现
二项队列的优势:不仅支持insert、delete_min和merger操作,而且最坏情况下运行时间为O(logN),插入操作平均花费 时间为O(1)二项队列不是一颗堆序的树,而是堆序树的集合,其中每一颗堆序树又称为二项树二项队列性质:高度为K的二项树恰好有2的K次幂个节点我们可以使用二项树的集合唯一地表示任意大小的优先队列#in...原创 2018-03-02 13:55:49 · 266 阅读 · 0 评论 -
一种归并排序实现
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令...原创 2018-03-12 10:26:03 · 161 阅读 · 0 评论 -
一种快速排序实现
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key...原创 2018-03-12 19:27:51 · 158 阅读 · 0 评论 -
一种插入排序实现
插入排序是一种较简单的排序算法。思想:它是由 N - 1趟排序组成,对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1上的元素均已排好序了。时间复杂度:O(N*N),平均情况下时间复杂度也是O(N*N)#include<stdio.h>int insert_sort(int a[],int N){ int i,j; int temp; for(i=1;i<N...原创 2018-03-06 16:32:19 · 141 阅读 · 0 评论 -
并查集(不相交集)ADT
等价关系:需要同时满足下列三个性质的关系R1、自反性:对于所有的a属于集合S,a R a(自身与自身有关系)2、对称性:a R b当且仅当b R a(如果a和b有关系,则b和a也有关系)3、传递性:若a R b且b R c,则a R c(如果a和b有关系,b又和c有关系,则a和c有关系)等价集合:如果一个元素a 属于集合S,则元素a的等价集合是集合S的一个子集,它包含所有与元素a有等价关系的元素。...原创 2018-03-14 15:42:28 · 400 阅读 · 0 评论 -
一种伸展树实现
伸展树的优点:1、数据结构较简单,不需要保存AVL平衡相关信息,可以节省空间 2、不存在坏的输入序列,它可以保证任意连续M次对树的操作最多花费O(M log N)时间 3、一棵伸展树每次操作的摊还时间为O(log N)伸展树的基本思想:当一个基点被访问后,它就要经过一系列旋转处理,直至将该节点放到根上,便于...原创 2018-02-14 11:36:00 · 184 阅读 · 0 评论 -
一种AVL树实现
二叉搜索树的时间复杂度为O(logN),但是在最坏情况下,其时间复杂度却为O(N),为了保证即使在最坏情况下时间复杂度也接近O(logN),AVL树就应运而生了。AVL树,只是一种特殊的二叉搜索树,特殊之处在于:“任意节点的左子树高度和右子树高度最多差1”,所以这样的二叉搜索树基本是平衡的。原创 2017-12-28 14:23:11 · 158 阅读 · 0 评论 -
一种hash表实现(分离链接法)
一种hash表实现(分离链接法)原创 2018-01-03 11:28:24 · 409 阅读 · 0 评论 -
顺序栈的一种实现
顺序栈的一种实现原创 2017-07-11 07:47:44 · 397 阅读 · 2 评论 -
线性表链式存储结构一种实现
线性表链式存储结构实现原创 2017-07-31 22:12:09 · 449 阅读 · 1 评论 -
线性表顺序存储结构一种实现
线性表简单数组实现原创 2017-07-31 22:02:37 · 256 阅读 · 1 评论 -
链式队列一种实现
队列的链表实现方式原创 2017-09-22 19:14:13 · 198 阅读 · 0 评论 -
循环队列一种实现
队列的数组实现方式原创 2017-09-22 19:18:12 · 214 阅读 · 0 评论 -
一种二叉树的建立和遍历实现
一种二叉树的建立和遍历实现原创 2017-11-03 14:56:48 · 256 阅读 · 0 评论 -
一种二叉树层序遍历实现
一种二叉树层序遍历实现原创 2017-12-21 16:34:59 · 168 阅读 · 0 评论 -
一种二叉搜索树实现
使用C语言实现一颗二叉搜索树原创 2017-12-25 09:13:25 · 195 阅读 · 0 评论 -
教你透彻了解红黑树
转载地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/03.01.md二叉查找树由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉...转载 2018-03-27 15:36:38 · 153 阅读 · 0 评论