
数据结构与算法
文章平均质量分 75
数据结构与算法思维导图 数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。 数据结构是为算法服务的,算法是要作用再特定的数据结构上的。
zhufei463738313
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(二十三)数据结构-哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键吗值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。原创 2023-05-17 10:25:54 · 488 阅读 · 0 评论 -
(二十二)查找算法-斐波那契算法
(1)黄金分割点是指一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618.由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意想不到的效果。(2)在讲算法之前,先介绍一下斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1、1、2、3、5、8、13、21、34、55……。F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该方法也叫黄金分割法。原创 2023-04-24 16:04:14 · 667 阅读 · 0 评论 -
(二十一)查找算法-插值查找
(1)插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid 处开始查找。(2)将折半查找中的求 mid 索引的公式,low 表示左边索引,high 表示右边索引。注意:key代表需要查找的值。(3)插值查找的mid 值是通过公式计算得来由,由公式可以明显看出mid的值并非像二分那样为左右索引的中间位置。/*插值索引*/(1)查找的序列必须有序(2)对于数据量大的以及关键字分布均匀的有序序列来说,插值查找的速度较快。(3)对于分布不均匀的有序序列来说,该算法不一定比二分查找要好。原创 2023-04-23 16:01:26 · 282 阅读 · 0 评论 -
(十九)查找算法-线性查找
在 Java 中,常用的查找算法有4种:(1)顺序(线性)查找(2)二分查找/折半查找(3)插值查找(4)斐波那契查找。原创 2023-04-22 09:30:41 · 556 阅读 · 0 评论 -
(二十)查找算法-二分查找
二分查找又叫折半查找,是一种高效简单的查找算法,通常用于在有序的数组中查找某个元素,例如从{1,2,4,6,8,9,10,23,24}的数组中查找值是8的元素,就可以采用二分查找法。给一个有序的序列,取中间元素和目标元素进行对比,取其中的一半,丢弃另一半,快速缩小目标元素所在的位置。主要思想还是:快速缩小目标元素所在的区间。二分查找的前置条件:序列必须是有序的,升序或者降序都可以,这个条件主要是二分查找时需要和序列中的中间元素进行比较来排除一半的元素,如果是无序的,则比较无意义。原创 2023-04-22 10:21:18 · 625 阅读 · 0 评论 -
(十八)排序算法-计数排序
计数排序是一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。这是一种牺牲空间换取时间的做法。找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数组C的第i项;对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);原创 2023-04-13 12:01:18 · 217 阅读 · 0 评论 -
(十七)排序算法-基数排序
(1)基数排序(radix sort)属于“分配式排序”,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。(2)基数排序是属于稳定性的排序,基数排序法是效率高的稳定性排序法。(3)基数排序是桶排序的扩展。(4)基数排序是1887年赫尔曼.何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。原创 2023-04-13 11:24:26 · 4005 阅读 · 0 评论 -
(十六)排序算法-桶排序
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来,即得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间 o(n)。但桶排序并不是比较排序,它不受到O(n log n)下限的影响。原创 2023-04-13 09:45:23 · 940 阅读 · 0 评论 -
(十五)排序算法-归并排序
归并排序(Merge Sort)是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。动图展示:动画展示。原创 2023-04-11 16:32:55 · 368 阅读 · 0 评论 -
(十四)排序算法-快速排序
快速排序(QuickSort),又称划分交换排序(partition-exchange sort)是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。从数列中挑出一个元素,称为"基准"(pivot),通常选择第一个元素重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。原创 2023-04-11 15:47:51 · 77 阅读 · 0 评论 -
(十三)排序算法-希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。动画展示:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。原创 2023-04-10 15:28:02 · 449 阅读 · 0 评论 -
(十二)排序算法-插入排序
插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。插入排序思路图,如下所示。原创 2023-04-10 14:11:40 · 773 阅读 · 0 评论 -
(十一)排序算法-选择排序
选择排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0] ~ arr[n-1] 中选取最小值,与 arr[0] 交换;第二次从 arr[1] ~ arr[n-1] 中选取最小值,与arr[1] 交换;第三次从 arr[2] ~ arr[n-1] 中选取最小值,与arr[2] 交换;…,原创 2023-04-10 11:18:56 · 432 阅读 · 0 评论 -
(十)排序算法-冒泡排序
排序也称为排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。原创 2023-04-10 09:02:46 · 844 阅读 · 0 评论 -
(九)递归
递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变的简洁。原创 2023-03-24 16:56:35 · 209 阅读 · 0 评论 -
(八)数据结构-栈
(1)栈的英文为(stack);(2)栈是一个先入后出(FILO-First In Last Out)的有序列表;(3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom);(4)根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。原创 2023-03-13 16:45:44 · 115 阅读 · 0 评论 -
(七)数据结构-单向环形链表
带环链表的最后一个节点不再指向 NULL 了,指向的是前面任意一个节点,以此形成带环链表,并一直循环下去原创 2023-03-13 10:30:01 · 421 阅读 · 0 评论 -
(六)数据结构-双向链表
双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。原创 2023-03-10 11:02:15 · 103 阅读 · 0 评论 -
(五)数据结构-单链表
1. 链表是以节点的方式来存储,是链式存储;2. 每个节点包含 data 域,next 域,next 域指向下一个节点;3. 如图:发现链表的各个节点不一定是连续存放的;4. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。原创 2023-03-06 16:51:43 · 595 阅读 · 0 评论 -
(四)数据结构-队列
• 队列是一个有序列表,可以用数组或者链表来实现。• 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。原创 2023-03-01 11:19:34 · 86 阅读 · 0 评论 -
(三)数据结构-稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:(1)记录数组一共有几行几列,有多少个不同的值。(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。原创 2023-02-28 09:21:56 · 57 阅读 · 0 评论 -
(二)算法分析
研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求原创 2023-02-23 11:55:20 · 479 阅读 · 0 评论 -
(一)数据结构与算法概述
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。原创 2023-02-23 09:53:01 · 78 阅读 · 0 评论