![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
xuws
这个作者很懒,什么都没留下…
展开
-
排序算法(五)希尔排序
希尔排序是一种插入排序(小于O(N2)),不稳定,直接插入排序改进希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,希尔排序的基本步骤 :选择增量gap=length/2,缩小增量继续以gap = gap/2的方式,这种增量选择我们可以用一个序列来表示,{n/2,(n/2)/2...1},称为增量序列。(希尔排序的增量序列的选择与证明是个数学难题,我们选...原创 2019-02-27 14:47:39 · 269 阅读 · 0 评论 -
排序算法(四)快速排序
快速排序是一种交换排序( Nlog2N)最坏情况(O(N2)) 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。详细的图解往往比大堆的文字更有说明力,所以直接上图:上图中,演示了快速排序的处理过程:初始状态为一...原创 2019-02-27 14:19:54 · 271 阅读 · 0 评论 -
排序算法(三)直接插入排序
直接插入排序是一种最简单的插入排序。(O(N2))/*3,1,5,4,2第一次排序,1比3小,则1和3换位置,变为了1,3,5,4,2第二次排序,5比3大,不需要调整,仍未1,3,5,4,2第三次排序,4比5小,则4和5 换位置,此时4比3大,则不再继续调整,此时变为了1,3,4,5,2第四次排序,2比5小,2和5换位置,2又比4小,2继续和4换位置,2仍然比3小,继续和3换...原创 2019-02-27 14:06:18 · 228 阅读 · 0 评论 -
排序算法(二)冒泡排序
冒泡排序是一种交换排序(O(N2)) 1 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。public class BubbleSort { public static void main(String[] args) { int[]...原创 2019-02-27 11:44:03 · 138 阅读 · 0 评论 -
排序算法(一)简单选择排序
简单选择排序是一种选择排序(O(N2))(1)从待排序序列中,找到关键字最小的元素;(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。初始关键字:『 8,5,2,6 』 第一趟排序后:2,『8,5,6』 第二趟排序后:2,5,『8,6』 第三趟排...原创 2019-02-27 09:51:28 · 289 阅读 · 0 评论 -
数据结构 —— 红黑树
特性 节点是红色或黑色。 根节点是黑色。 每个叶子节点都是黑色的空节点(NIL节点)。 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)。 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。 择取两篇博客:https://blog.csdn.net/sw950729/article/det...原创 2019-03-01 16:09:27 · 119 阅读 · 0 评论 -
数据结构 —— 哈夫曼(huffman)树和哈夫曼编码及压缩
择取两篇博客1 https://www.cnblogs.com/kubixuesheng/p/4397798.html2 https://www.cnblogs.com/liguangsunls/p/7207265.html哈夫曼树的构造(哈夫曼算法)1.根据给定的n个权值{w1,w2,…,wn}构成二叉树集合F={T1,T2,…,Tn},其中每棵二叉树T...原创 2019-03-01 15:02:33 · 378 阅读 · 0 评论 -
数据结构 —— B树与B+树
B树 B+树的优势有:1.单一节点存储更多的元素,使得查询的IO次数更少。(单一节点存储更多的元素是因为B+的非叶子节点不存储数据,存的是索引)2.所有查询都要查找到叶子节点,查询性能稳定。(同样是因为非叶子节点不存储数据,数据只有叶子节点有)3.所有叶子节点形成有序链表,便于范围查询。这里择取两篇博客1https://blog.csdn.net/u01110988...原创 2019-03-01 14:01:40 · 144 阅读 · 0 评论 -
数据结构 ——二叉查找树《BST》与平衡二叉树《AVL》
1二叉查找树定义(查找最好时间复杂度O(logN),最坏时间复杂度O(N))在二叉查找树中:(01) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(02) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(03) 任意节点的左、右子树也分别为二叉查找树。(04) 没有键值相等的节点2具体代码流程节点结构pu...原创 2019-03-01 13:47:02 · 200 阅读 · 0 评论 -
数据结构——二叉树
1 二叉树概念二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者有一个根节点和两颗互不相交的,方便称为根节点的左子树和右子树的二叉树组成一般的树都可以使用孩子兄弟表示法转换为二叉树表示(二)特殊的二叉树1.斜二叉树或者所有的结点都只有左子树的二叉树叫做左斜树所有的结点都只有右子树的二叉树叫做右斜树相当...原创 2019-02-28 14:13:11 · 115 阅读 · 0 评论 -
数据结构 ——树
1 基础知识 1.树的定义树是一种非线性的数据结构,右n(n>=0)个结点组成的有限集合,如果n=0,称为空树,如果n>0,则:有一个特定的结点被称之为跟结点(root),根结点只有直接后继,没有前驱, 除根结点外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1...Tm-1,每一个集合又是一颗子树,并称之为跟的子树。 树的示例如下:...原创 2019-02-28 11:14:08 · 539 阅读 · 0 评论 -
排序算法(九)总结
堆排序、快速排序、希尔排序、直接选择排序不稳定的排序算法,基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。 1 简单选择排序 是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素 作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。 数组末端的0要回到首位置很是费...原创 2019-02-27 16:53:15 · 142 阅读 · 0 评论 -
排序算法(八)归并排序
归并排序 O(n*log2n)--稳定 思想1.判断需要进入递归操作的边界值.(一般 left<right)2.把数组分成两半. Mid =(left+right)/23.进行左半边数组递归调用.直到 left=right ,不在递归.此时提取出数组的第一个元素4.进行右半边数组递归调用.5.调用merge方法,把两个有序数组合并.合并的时候会使用一个临时数组.合并的思路...原创 2019-02-27 16:38:59 · 147 阅读 · 0 评论 -
排序算法(七)基数排序
基数排序法是属于稳定性的排序O (nlog(r)m),其中r为所采取的基数(桶树),而m为堆数( 位数)有如下数组: 第一趟:我们首先对这个数组按照其个位数进行分组,结果如下: 然后将分组后的数据按照索引的大小取出,得到新的数组如下: 第一趟排序后完成的工作为将数组按照个位数由小到大的顺序进行了排序第二趟:对第一趟的结果按照十位数进行分组,结果如下:...原创 2019-02-27 15:45:52 · 390 阅读 · 0 评论 -
排序算法(六)堆排序
堆排序利用完全二叉树的选择排序(O(nlog2n)) 堆的概念在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时...原创 2019-02-27 15:10:47 · 178 阅读 · 0 评论 -
数据结构(1)——绪论
1 数据结构1数据元素由多个数据项组成2数据对象由性质相同的数据元素组成的集合,是数据的一个子集3数据结构是相互之间存在一种或者多种特定关系的数据元素的集合4数据结构分逻辑结构和物理结构(存储结构)2算法算法的5大特性:有穷性,确定性,可行性,输入,输出算法的时间复杂度与空间复杂度...原创 2019-05-19 16:02:05 · 112 阅读 · 0 评论