![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 53
棠微风
这个作者很懒,什么都没留下…
展开
-
算法——希尔排序
(1)简单插入排序存在的问题:当使用插入排序(从小到大排序)时,如果需要插入的数是位于原数组中位置靠后,且较小的数,后移的次数明显增多,对效率有影响。(2)希尔排序是希尔(Donald Shell)1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。(3)基本思想:按下标的把一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分成一组,算法便终止。原创 2024-05-29 23:14:03 · 260 阅读 · 0 评论 -
算法——插入排序
(1)插入排序属于内部排序法,是对于待排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。(2)基本思想:把n个待排序的元素看作一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。原创 2024-05-21 22:00:39 · 261 阅读 · 1 评论 -
算法——选择排序
(1)选择排序也属于内部排序法,是从待排序的数据中,按指定的规则选出某一元素,再按照规定交换位置后达到排序的目的。原创 2024-05-21 21:59:29 · 472 阅读 · 0 评论 -
算法——冒泡排序
(1)冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,像水底下的气泡一样逐渐向上冒。(2)优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。原创 2024-05-17 22:17:39 · 145 阅读 · 0 评论 -
算法的空间复杂度
(2)空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法、基数排序就属于这种情况。(3)在做算法分析时,主要讨论的是时间复杂度。一些缓存产品(redis, memcache)和算法(基数排序)本质就是用空间换时间。(1)一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,它也是问题规模n的函数。原创 2024-05-17 22:15:45 · 183 阅读 · 0 评论 -
算法的时间复杂度
一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作,称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。T(n)不同,但时间复杂度可能相同。如:T(n)=n²+7n+6与T(n)=3n²+2n+2, T(n)不同,但时间复杂度相同,都为O(n²)。原创 2024-05-13 22:42:26 · 781 阅读 · 0 评论 -
递归——八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、 同一列或同一斜线上,问有多少种摆法。原创 2024-05-13 22:39:10 · 391 阅读 · 0 评论 -
算法——递归(演示 迷宫问题)
递归就是方法自己调用自己,每次调用时传入不同的变量。原创 2024-05-05 21:38:15 · 279 阅读 · 0 评论 -
数据结构——逆波兰计算器(后缀表达式)
(1)中缀表达式就是平时所使用的表达式,但不方便计算机使用。后缀表达式又称逆波兰表达式,运算符位于操作数之后,适合计算机使用。②遇到+运算符,弹出4和3(4为栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7入栈;④接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;⑥最后是-运算符,计算出35-6的值,即29,由此得出最终结果。①从左至右扫描,将 3 和 4 压入堆栈;(2)后缀表达式举例。原创 2024-05-01 00:25:13 · 193 阅读 · 0 评论 -
数据结构——栈实现综合计算器(中缀表达式)
输入一个字符串类型的表达式,例如:7*2*2-5+1-5+3-3,计算出结果。原创 2024-05-01 00:22:29 · 485 阅读 · 2 评论 -
数据结构——栈
(1)栈的英文为(stack)(2)栈是一个先入后出(FILO-First In Last Out)的有序列表。(3)栈是限制线性表中元素的插入和删除,只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,是变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。(4)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶;而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。(5)出栈(pop)示意图(6)入栈(push)示意图。原创 2024-04-26 23:12:07 · 404 阅读 · 0 评论 -
单向环形链表 解决 约瑟夫(Josephu)问题
约瑟夫(Josephu)问题设编号为1,2,… n的n个人围坐一圈,约定编号为k(1原创 2024-04-26 23:08:34 · 434 阅读 · 0 评论 -
数据结构——双向链表
使用带有head头的双向链表实现“角色排行榜”。原创 2024-04-24 23:48:26 · 386 阅读 · 0 评论 -
数据结构——单链表
(1)链表是以节点的方式来存储,是链式存储。(2)每个节点包含data域:存放数据,next域:指向下一个节点。(3)最后一个节点的next为null,表示链表结束。(4)链表是有序的列表,但是它在内存中。原创 2024-04-23 16:50:23 · 601 阅读 · 0 评论 -
数据结构——队列
(1)队列是一个有序列表,可以用数组或链表来实现。(2)遵循先入先出的原则。即:先存入队列的数据,要先取出;后存入的要后取出。(3)示意图:(使用数组模拟队列)1.front表示队首,rear表示队尾2.当数据加入时,rear不断增加,front没有变化。3.当数据取出时,front不断移动,rear没有变化。原创 2024-04-21 12:36:30 · 311 阅读 · 0 评论 -
稀疏数组讲解
(1)当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。2.把具有不同值的元素的行列及值记录在一个小规模的数组中,从而。1.先读取稀疏数组的第一行,根据第一行的数据,创建二维数组。1.遍历 原始的二维数组,得到有效数据的个数 sum。2.再读取稀疏数组后几行的数据,并赋给 二维数组。1.记录数组一共有几行几列,有多少个不同的值。3.将二维数组的有效数据数据存入到 稀疏数组。(1)使用稀疏数组,来保留的二维数组。(2)把稀疏数组恢复成原来的二维数组。2.1.2 应用实例。原创 2024-04-21 12:34:11 · 253 阅读 · 0 评论 -
数据结构与算法概述
数据结构包括:线性结构和非线性结构。原创 2024-04-21 12:30:41 · 97 阅读 · 0 评论