6.数据结构期末复习之查找和排序1

news/2024/7/24 4:27:40 标签: 数据结构, 算法
  1. 概念
  1. 静态查找: 无插入和删除
    动态查找: 边插入删除边查找
  2. 静态和动态查找的实现方式
    1.线性表: 静态查
    2.树表(二叉排序树)动态查
    3.散列表 静态动态都可以
  3. 查找: 集合中查找满足条件的数据
  4. 关键码
    1.主关键码:可以表标识数据唯一性
    2.次关键码: 不能标识
  5. 查找效率: 比较次数决定的,
  6. 平均查找效率: ASL=求和(i出现的概率*查i需要的比较次数[只有这个可以控制])

2.顺序查找(从头到尾,从尾到头)

  1. 改进设置哨兵
  2. 优点 代码简单,用得广,数据不用有序
    缺点: 元素多时,慢,不用他

在这里插入图片描述
3.折半查找(别名,对半,二分查找)!!!有序的顺序表,取中间 比较两边;!!!不用哨兵比较容易理解
//每次除的时候是[xxx,xx) 相加起来/2

在这里插入图片描述

//也可以用递归实现,结束条件 low>high
4.折半查找判断树(以上面的为例)(二叉排序树)
在这里插入图片描述
//时间由深度决定,求二叉(折半)查找判定树,根据某个元素的深度,得到他的查找次数
在这里插入图片描述
ASL平均查找长度为: ASL=(11+22+34+44)/10
查找失败时平均查找长度为: (记得看层数每一层节点数)(自己补上失败的节点)ASL=34/11=12/11=1

5.树表之二叉排序树(边插入边查)

1.存储:二叉链表

在这里插入图片描述

2.中序:可写出升序序列
3.二叉排序树的插入,自己构造二叉排序树(一个节点一个节点插入,先从根节点开始一一判断节点值)
在这里插入图片描述
6.平衡二叉树(解决左右树高的差值>1,通过转换变为最大高度差为1的二叉树)

7.散列查找(查找专用) (之前是用比较放位置,现在直接由数据运算得到数据的地址)

  1. 概念
    1.散列表:数组+使用散列函数来实现查找
    2.散列函数:封装了 由数据技术得出数据地址的函数
    3.同义词 比如 10%7=3 17%7=3(散列函数的部分实现) 所以10和17是同义词会导致冲突!!!
  2. 方式
    1.直接定址法(直接由数据得到地址比如) 10/10=1 存到下标为1的数组
    2.平方取中法: 如 (12)^2=144 我取 4(中间部分)为地址
    3.除留余数法(实用) 要取小于表长的最小素数(就是要不可分解,比如 13只能分解为1和13)
    如: 1%13=1 ; 13%13=0; //不会下标超过数组长度
    4.(解决冲突的方法)开放定址法: 如果冲突那么,去放到冲突元素的下一位
    5.(解决冲突的方法)二次探测法: 如果冲突 那么和4一样,就是跳跃的距离是 1^2 2^2
    3^3…, 比如 10%10=0 已经冲突了 第一次我去下一个元素,第二次我去4的下标探测…
    6.拉链法: 数组+单链表, 如果这个数组下标被放 了元素,我直接放到链表里面

下面使用线性探测法解决冲突
在这里插入图片描述
//另外一个例子,如果探测后面都冲突了,需要重新从头开始探测, %的魅力
在这里插入图片描述
----------排序算法--------------
8.插入排序

  1. 直接插入排序(无序区的元素插入有序区中,有序插入元素以后,数组需要后移)

在这里插入图片描述

  1. 希尔排序(直接插入的优化,也是插入,但是元素的距离,相当于一个数组看成多个数组来排序)

在这里插入图片描述
9.交换排序

  1. 冒泡(起泡)排序(相邻元素相互比较,最大的元素/最小的元素 向后面跑)(优化,如果移动的位置与上一趟相同,退出循环)

在这里插入图片描述

2.快速排序(冒泡排序的优化) c语言类库常用算法(本质是, 小<轴<大,两个指针在左和右边,遇到可以和轴可以交换的就交换)

在这里插入图片描述
//核心轴值不变,交换轴改变
在这里插入图片描述

动画 https://www.bilibili.com/video/BV1rW4y1x7Kh/?spm_id_from=333.337.search-card.all.click&vd_source=a50956e86b1f1bd61ba2abf42b71ff61

10.选择排序
1.简单选择排序(直接我从头遍历,得到最小的元素) 趟数=有多少个元素-1次

在这里插入图片描述
11.归并排序(和MapReduce分而治之的思想一样,先大任务分为小任务,然后小任务一一汇总为一个结果)
1.二路归并排序((n)/2-1趟)
49 38 65 97 76 13 27
在这里插入图片描述


http://www.niftyadmin.cn/n/420784.html

相关文章

27 getcwd 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径 不过 我们这里是从 具体的实现 来看一下 测试用例 就是简单的使用了一下 getcwd rootubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c #inc…

PandoraBox版本及已安装软件包

主机名 PandoraBox_7FBB 型号 Netgear R6220 固件版本 PandoraBox 19.02 2019-02-01-git-93f2639a7 / LuCI Master (git-19.026.77036-498ca21) 内核版本 3.14.79 ——————————————————— 软件包名称 8021xd aria2 bandwidth-pandorabox base-file…

华为OD机试真题 JavaScript 实现【最长回文子串】【牛客练习题】

一、题目描述 给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 所谓回文串&#xff0c;指左右对称的字符串。 所谓子串&#xff0c;指一个字符串删掉其部分前缀和后缀&#xff08;也可以不删&#xff09;的字符串 数据范围&#xff1a;字符串长度1≤s…

网络安全学术顶会——SP 2023 议题清单、摘要与总结(上)

总结 本文总结了196篇近期涉及网络安全领域的研究论文。主要可分为以下几类: 隐私保护,涉及到匿名认证、隐私保护机器学习等机器学习安全,主要研究对抗样本和隐蔽后门等问题浏览器和网络安全,涉及指纹识别、端到端加密、网站选择标志等嵌入式系统安全,主要针对 IOT 安全操作系统…

【算法与数据结构】19、LeetCode删除链表的倒数第 N 个结点

文章目录 一、题目二、双指针法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、双指针法 思路分析&#xff1a;这道题使用双指针一次遍历就能删除目标节点。快慢指针同一位置出发&#xff08;虚节点&#x…

HNU人工智能实验四-基于YOLOV3-DarkNet50的篮球检测模型

实验四&#xff1a;深度学习算法及应用-基于YOLOV3-DarkNet50的篮球检测模型 项目文档工程&#xff1a;https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/ 前言 这个实验要求做一个深度学习项目&#xff0c;做头歌的或者自己在华为云找一个都行&…

整理出一些Java相关的有用的网址

在解决问题的过程中&#xff0c;会发现一些有用的网址&#xff0c;整理记录在这里方便以后使用。 Data Structure Visualization Data Structure Visualization 后期逐步添加

【Android笔记109】Android之更新UI界面的几种常用方式

这篇文章,主要介绍Android之更新UI界面的几种常用方式。 目录 一、Android更新UI 1.1、使用Handler更新组件 1.2、使用runOnUiThread()更新UI 1.3、使用