DS冲刺整理做题定理(四)查找与排序

        最后一期更新,考试之前应该不会再出该专题了,之后有时间会出一些有关链表的代码题,其他章节只挑选重点的总结~


一.查找

1.顺序查找

        又被称为线性查找,对顺序表和链表都使用~基本思想是从某一端开始,逐个检查关键字是否满足给定的条件~

2.折半查找

        适用于有序的顺序表:首先将给定值key与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置,若不等,则所需查找的元素只能在中间元素以外的前半不分或者后半部分,然后在缩小的范围内继续进行同样的查找,如此重复直到找到为止 

3.分块查找

        分块查找又称为索引顺序查找,将查找表分为若干个小的子块,块内元素可以无序,但块之间是有序的~即将查找的过程分为两步:第一步是在索引表猴子那个确定待查记录所在的块,第二步则是在快内顺序查找~

4.二叉排序树(BST)

        又被称为二叉查找树,若左子树非空,则左子树上所有的结点的值均小于根节点的值,而右子树则均大于,这样在查找节点时可以达到类似分块查找的效果~

5.平衡二叉树

        AVL树,为了防止树的高度增长过快而降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左右子树高度差的绝对值不超过1,将这样的二叉排序树称为平衡二叉树,简称平衡树~

6.散列表

  • 散列函数:将查找表中的关键字映射成该关键字对应位置地址的函数
  • 散列冲突:将2个或更多的关键字映射再同一地址
  • 哈希函数的种类:直接定址、除留取余、数字分析、平方取中
  • 处理冲突的方法:开放定址、拉链法(链接到同一个位置上的链表)
  • 要会计算平均查找长度ASL~

二.排序

1.插入排序

  • 直接插入:将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。
  • 折半插入:先折半查找出元素待插入的位置,再统一地一定待插入位置之后的所有元素
  • 希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。

2.交换排序

  • 冒泡排序:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
  • 快速排序:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。

3.选择排序

  • 简单选择:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
  • 堆排序:利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

4.归并排序

        将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

5.基数排序

        它是通过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

6.外部排序

  • 多路归并排序:多路归并是外部排序(External Sort)的基础,实现也比较简单,和最简单的归并排序中的二路归并是基本一样的,只不过路数是浮动的k(不是重点~)

7.对比~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278520.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR云游打造沉浸式文旅新体验,延伸智慧文旅新业态

从“跃然纸上”到“映入眼帘”,随着国家数字化战略的深入实施,文旅产业的数字化转型正在不断加快,“沉浸式”逐渐成为了文旅消费新热点。VR技术与文旅产业相融合,新产品、新模式、新业态不断涌现,文旅资源逐渐“活”起…

智能插座是什么

智能插座 电工电气百科 文章目录 智能插座前言一、智能插座是什么二、智能插座的类别三、智能插座的原理总结 前言 智能插座的应用广泛,可以用于智能家居系统中的电器控制,也可以应用在办公室、商业场所和工业控制中,方便快捷地实现电器的远…

Milesight VPN server.js 任意文件读取漏洞(CVE-2023-23907)

0x01 产品简介 MilesightVPN 是一款软件,一个 Milesight 产品的 VPN 通道设置过程更加完善,并可通过网络服务器界面连接状态。 0x02 漏洞概述 MilesightVPN server.js接口处存在文件读取漏洞,攻击者可通过该漏洞读取系统重要文件&#xff…

西南交通大学【数电实验7---按键防抖动设计】

实验电路图、状态图、程序代码、仿真代码、仿真波形图(可以只写出核心功能代码,代码要有注释) 一共四个状态:1.未按下时空闲状态 2.按下抖动滤除状态 3.按下稳定状态 4.释放抖动滤除状态 在第一个状态时,等待按键按下&…

Nginx七层代理,四层代理 + Tomcat多实例部署

目录 1.tomcat多实例部署 准备两台虚拟机 进入pc1 pc2同时安装jdk 进入pc1 pc2安装tomcat PC1配置(192.168.88.50) 安装tomcat多实例 tomcat2中修改端口 启动tomcat1 tomcat2 分别在三个tomcat服务上部署jsp的动态页面 2.nginx的七层代理&…

使用set和emit在uni-app中实现响应式属性和自定义事件

在uni-app中,我们经常需要动态设置响应式属性,并且通过自定义事件来实现组件间的通信。这时,我们可以使用set和emit来轻松实现这些功能。 使用$set动态设置响应式属性 在Vue中,我们可以使用来动态设置响应式属性。在uniapp中使用…

Linux部署MySQL5.7和8.0版本 | CentOS和Ubuntu系统详细步骤安装

一、MySQL数据库管理系统安装部署【简单】 简介 MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品,无论是后端开发、…

Redis设计与实现之跳跃表

目录 一、跳跃表 1、跳跃表的实现 2、跳跃表的应用 3、跳跃表的时间复杂度是什么? 二、跳跃表有哪些应用场景? 三、跳跃表和其他数据结构(如数组、链表等)相比有什么优点和缺点? 四、Redis的跳跃表支持并发操作吗…

LeetCode:2415. 反转二叉树的奇数层(层次遍历 Java)

目录 2415. 反转二叉树的奇数层 题目描述: 实现代码与解析: BFS 原理思路: 2415. 反转二叉树的奇数层 题目描述: 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,…

【单调栈]LeetCode84: 柱状图中最大的矩形

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的知识点 单调栈 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形…

动态规划——斐波那契数列模型:1137.第N个泰波那契数

文章目录 题目描述算法原理1.状态表示(最重要的)什么是状态表示?状态表示怎么来的呢?本题的状态表示 2.状态转移方程(最难的)本题的状态转移方程 3.初始化(后三步完成剩下百分之一的细节问题)本题的初始化 4.填表顺序本…

怎样下载微博视频而不至于发生“403 Forbidden“现象?

近段时间不知道从什么时候开始,微博视频都不让从网页下载了。以前是看到有想要下载的微博视频,就点进去微博详情页用谷歌浏览器F12进入调试的方式,选“Network”->“Media”->重新F5刷新页面等待调试框里出现链接->在链接上鼠标右键…