数据结构
文章平均质量分 55
scorpio_j
时间见证成长
展开
-
【堆排序】
首先构建一个大顶堆(升序),或者小顶堆(降序)。将堆顶的元素放到数组的最后位置。重新调整堆,保证是大顶堆或者小顶堆。重复上面的操作。import java.util.Arrays;public class HeapSort { public static void main(String[] args) { int[] arr = new int[]{1,2,3,9,8,5,3,2,4}; heapSort(arr); System.out.println(Arrays.t.原创 2022-05-30 15:33:28 · 232 阅读 · 0 评论 -
归并排序
归并排序是完全遵循分治法实现的。分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。解决:使用归并排序递归地排序两个子序列。合并:合并两个已排序的子序列以产生已排序的序列。归并排序的关键操作是“合并”步骤中两个已排序序列的合并。下图展示归并排序的全部过程,以数组{38,27,43,3,9,82,10}为例。两个有序序列的合并,只要比较两个序列中的原创 2017-07-26 23:56:46 · 165 阅读 · 0 评论 -
冒泡排序和快速排序
冒泡排序(Bubble Sort):顾名思义就是,越大的元素会经由交换慢慢"浮”到数列的顶端。冒泡排序算法的运作如下:1:比较相邻的两个元素,如果前面的比后面的大(小),就交换它们。2:重复1中的操作,除了最后一个元素,知道最后一对数据,在这一点上,会保证最后的元素会是最大(小)。3:重复以上的步骤,直到没有任何一对数据需要比较。分析:当数列为正序时:时间复杂度为O(n原创 2017-07-29 02:06:43 · 901 阅读 · 0 评论 -
最小生成树(Kruskal算法和Prim算法)
最小生成树:一个有n个结点的连通图的生成树,是原图的极小连通子图,包含原图放入所有结点,并且保持图连通的最小的边。求最小生成树可以用Kruskal(克鲁斯卡尔)算法和Prim(普里姆)算法求出。Kruskal算法:具体思路:是将每条边上的权进行排序,之后在从中选取最小的边,加入最小树的集合中。注意:在以上的过程中得防止出现环路。可以用并查集维护。 以下图为例: 首先,建图,用一个结构体数组:原创 2017-08-02 01:11:46 · 516 阅读 · 0 评论 -
二叉树的建立和遍历
首先,有一颗二叉树,形如: 有了要建立的二叉树,就好办了。只要在输入数据时输入DBA##C##EF##G##即可。 先用一个结构体来定义二叉树typedef struct node{ struct node *lc; //左孩子 struct node *rc; //右孩子 char data;}NODE; 之后,在写一个函数,递归建立二叉树,在主函数中调原创 2017-08-14 16:54:19 · 251 阅读 · 0 评论 -
链表的实现(C语言)
链表相对于数组来说有诸多的优点:节省内存,有效的利用空间删除某一数据,在某一位置插入数据,很方便快捷但是相对于数组来说,也是有缺点的,就是查找会慢一些。对于链表的操作无非就是,插入、删除、查找。typedef struct node{ int data; struct node *next;}Node;创建链表Node *create(Node *t,int n){原创 2017-09-04 13:27:12 · 293 阅读 · 0 评论 -
KMP模式匹配算法
首先,这是由Knuth、Morris和Prattle三人设计的线性时间字符串匹配算法。 这里就不仔细的讲解,网上有更好的讲解,在这推荐几个自己当时学习的KMP所看到的较好理解的http://www.cnblogs.com/c-cloud/p/3224788.htmlhttp://www.61mon.com/index.php/archives/183/这里附上自己所学的代码:#include原创 2017-08-22 20:48:37 · 282 阅读 · 0 评论 -
二叉排序树的建立
首先二叉树排序树(Binary Sort Tree) 简称BST,又叫二叉查找树。具有以下性质:若它的左子树不为空,则左子树上的所有结点的值均小于它的根结构的值若它的右子树不为空,则右子树上的所有结点的值均大于它的根结构的值它的左,右子树也分别为二叉排序树。简单的概括起来就是:左<中<右 由此可知,二叉排序树的中序遍历一定是严格递增的。 代码:#include<iostream>usi原创 2017-08-24 00:52:26 · 626 阅读 · 0 评论 -
二叉树的非递归遍历
首先,我们把二叉树看成,root,left,right。来分析如何实现非递归二叉树的前,中,后遍历。前序遍历: 次序为:root,left,right。//非递归前序遍历二叉树void preorder(NODE *t) { if (t == NULL) return; stack<NODE *> s; s.push(t); while (!s.empty())原创 2017-10-11 00:55:02 · 697 阅读 · 0 评论