数据结构与算法
kobe_yang24
talk is cheap!show your code.
展开
-
快速排序及其优化
3.快速排序及其优化**并没有最好的排序算法,只有最适合的排序算法。**在面对不同规模的数据和不同排列的数据的时候,都有着适合当前数据的排序算法,一个好的排序算法就是面对合适的场景去选取最适合它的排序算法。3.1 普通快速排序**快排的思想找到一个值使得数组左边的值都是小于等于它的数,数组的右边都是大于它的数。**然后继续去操作左右区间。可以看到,分成左右区间后,分别对不同的区间继续当前操作,非常适合递归。如上图所示,需要两个指针。j 数组遍历的位置,i 第一个大于等于 选取的基准值的位置。遍原创 2021-09-13 14:55:13 · 3071 阅读 · 0 评论 -
排序算法总结
排序1冒泡排序 /** * 冒泡排序 * 每次比较计算出最大的值 放在数组的末尾 * 优化: 当一次循环没有 数据的交换的时候 就说明当前数组已经是有序的了 */ public void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { boolean flag = true; for (int j =原创 2021-08-20 19:11:56 · 501 阅读 · 0 评论 -
排序(一)
1.如何分析一个排序算法?排序算法的执行效率。最好、最坏、平均时间复杂度。时间复杂度的系数、低阶、常数。比较次数和交换的次数。排序算法的内存消耗(空间复杂度)。其实就是此排序算分的空间复杂度。原地排序。空间复杂度为O(1)的排序。排序算法的稳定性。排序的数据中存在相同的元素,排序的过程中不会改变这些用元素的位置,就说这个排序算法是稳定的。有序度一个数组中有序元素对的个数。有序元素对: a[i]<a[j],且i<j 就是一个有序对。对于一个数组他的数据为。9,原创 2020-08-17 09:15:02 · 109 阅读 · 0 评论 -
字符串匹配算法
字符串匹配1.BFBrute Force的缩写,也叫做暴力匹配算法,或者朴素匹配算法。主串和模拟串假设从A串(长度为n)中查找B串(长度为m),所以n>mA就是主串,B就是模拟串朴素匹配算法的核心思想就是:在主串中,检查起始位置分别为0、1、2…n-m且长度为m的n-m+1个字串,看有没有和模拟串匹配的。最坏情况的时间复杂度为O(n*m)但是实际开发中确实一个比较常...原创 2019-01-02 21:24:46 · 741 阅读 · 1 评论 -
数据结构之图
图1.图是什么?图是一种非线形的数据结构,比树更加复杂。图中的元素叫做顶点(vertex),图中的一个顶点可以和任意一个顶点建立联系,之间的联系就叫做边(edge),每个顶点有多少边,叫做这个顶点的度(degree)。像微博、微信、qq等交友软件,存储关注的粉丝,好友,好友的亲密度等都是用的图这种数据结构存储的。2.无向图微信中的好友就可以用无向图来存储。下图就是一个无向图。连个...原创 2018-12-25 21:33:00 · 974 阅读 · 0 评论 -
红黑树
红黑树1.1平衡二叉查找树平衡二叉查找树的严格定义:二叉树中任意一个节点的左右子树的高度相差不能大于1。完全二叉树和满二叉树都是平衡二叉树。平衡二叉查找树最早出现的是AVL树,是一种有严格的平衡二叉树。发明平衡二叉树的初衷是为了解决普通二叉树在频繁插入、删除、等动态更新的情况下,出现时间复杂度退化的问题。1.2红黑树红黑树(Red-Black Tree)是一种不严格的平衡二叉查找...原创 2018-12-24 23:36:23 · 203 阅读 · 0 评论 -
二叉查找树
二叉查找树1.1二叉树与散列表对比二叉树最大的特点就是支持动态的快速插入、删除、查找等操作。散列表也是支持这些操作的,而且散列表的这些操作都是比二叉树要高效,时间复杂度都是o(1),既然有了这么高效的散列表,为什么还要有二叉树呢?一,散列表是无序存储的,如果要有序输出,还是需要进行排序的,对于顺序二叉树来说,直接中序遍历输出的结果就是有序的。二,散列表的扩容缩容耗时很多,虽然我们可...原创 2018-12-24 23:35:19 · 275 阅读 · 0 评论 -
排序(一)
排序(一)1.如何分析一个排序算法?排序算法的执行效率。最好、最坏、平均时间复杂度。时间复杂度的系数、低阶、常数。比较次数和交换的次数。排序算法的内存消耗(空间复杂度)。其实就是此排序算分的空间复杂度。原地排序。空间复杂度为O(1)的排序。排序算法的稳定性。排序的数据中存在相同的元素,排序的过程中不会改变这些用元素的位置,就说这个排序算法是稳定的。有...原创 2018-12-24 23:33:24 · 289 阅读 · 0 评论 -
数据结构之堆
堆(Heap)1.堆是什么?堆其实就是一个完全二叉树,有以下两个特点:堆是一个完全二叉树。堆中每个节点的值都必须小于等于(或者大于等于)其子树的每个节点的值。根据第二条特性堆可有分为大顶堆和小定堆。大顶堆大顶堆就是堆中的每个节点的值都大于等于其子节点的堆。 小顶堆每个节点都小于等于其子树的每个节点的值的堆。如何实现一个堆?完全二叉树比较适合用堆来存储,堆是一...原创 2018-12-24 17:28:16 · 315 阅读 · 0 评论 -
归并排序与快速排序
归并排序与快速排序1.分治思想顾名思义,就是分而治之的意思,将大问题换分为无数个小问题,小的问题解决了,大的问题自然也就解决了。分之算法一般都是用递归来实现的。分治是一种解决问题的处理思想,递归是是一种编程技巧。2.归并排序归并排序的核心思想:就是讲一个数组分为前后两部分分别进行排序,然后将有序的两个数组再合并,就可以了。归并排序用到的是就是分治思想,就是把大问题转换为小的问题,...原创 2018-12-27 08:55:47 · 281 阅读 · 0 评论 -
线形排序
线形排序线形排序,就是时间复杂度为O(n)的排序算法,桶排序、计数排序、基数排序都是线形排序,之所以能做到线形排序的原因,是因为他们都是基于非比较的排序算法,都不涉及到元素之间的比较操作,线形排序的应用都是比较局限的,都是应用于特定的排序场景的。应用不是很广泛,但是如果数据的特征符合他们的特点,那么利用线形排序进行操作,会特别高效的。2.桶排序桶排序顾名思义就会用到痛,核心思想就是将要...原创 2018-12-27 08:01:17 · 354 阅读 · 0 评论 -
深度优先搜索和广度优先搜索
搜索算法算法是作用于具体的数据结构之上的,深度优先搜索和广度优先搜索都是基于图这种数据结构的。他们是两种最简单、最暴力的搜索。1.广度优先搜索(Breadth- First-Search)广度优先搜索(Breadth- First-Search),地毯式 层层推进的搜索策略,即现查找离起始点最近的,然后是次近的,一次往外搜索。六度分割理论并不是说任何人与人之间的联系必须要通过六...原创 2018-12-27 06:47:20 · 435 阅读 · 0 评论 -
二分查找你真的会吗?
#你会二分查找吗?##什么是二分查找 二分查找(Binary Search)算法,也被称为折半查找算法。算法的思想也是非常的简单。(此篇为学习完极客课程结构与算法总结而做,如有雷同纯属抄袭) 二分查找是一种极其简单的快速查找算法,生活中随处可见 ,例如我们之前都会遇到的猜数字的问题,用的就是二分查找到思想。##show your code public static int...原创 2018-10-30 20:17:44 · 299 阅读 · 0 评论 -
复杂的二分查找
1.解决上一篇的问题标题原创 2018-10-30 21:05:42 · 192 阅读 · 0 评论 -
二叉树
二叉树1.1什么是树(Tree)?树这种数据结构很像我们现实生活中的树,每个元素都是一个节点,用来连线的相邻节点的关系叫做父子节点。树是一种非线性数据结构。树的节点有如下几个:根节点父节点子节点叶子节点兄弟节点除此之外树还有三个相似的概念高度(Height)深度 (Depth)层(Level)高度:节点到叶子节点的最长距离。深度 :根节点到这个...原创 2018-12-20 09:51:54 · 208 阅读 · 0 评论