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

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

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

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

6.数据结构期末复习之查找和排序1_第1张图片
3.折半查找(别名,对半,二分查找)!!!有序的顺序表,取中间 比较两边;!!!不用哨兵比较容易理解
//每次除的时候是[xxx,xx) 相加起来/2

6.数据结构期末复习之查找和排序1_第2张图片

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

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

1.存储:二叉链表

6.数据结构期末复习之查找和排序1_第4张图片

2.中序:可写出升序序列
3.二叉排序树的插入,自己构造二叉排序树(一个节点一个节点插入,先从根节点开始一一判断节点值)
6.数据结构期末复习之查找和排序1_第5张图片
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.拉链法: 数组+单链表, 如果这个数组下标被放 了元素,我直接放到链表里面

下面使用线性探测法解决冲突
6.数据结构期末复习之查找和排序1_第6张图片
//另外一个例子,如果探测后面都冲突了,需要重新从头开始探测, %的魅力
6.数据结构期末复习之查找和排序1_第7张图片
----------排序算法--------------
8.插入排序

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

6.数据结构期末复习之查找和排序1_第8张图片

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

6.数据结构期末复习之查找和排序1_第9张图片
9.交换排序

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

6.数据结构期末复习之查找和排序1_第10张图片

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

6.数据结构期末复习之查找和排序1_第11张图片
//核心轴值不变,交换轴改变
6.数据结构期末复习之查找和排序1_第12张图片

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

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

6.数据结构期末复习之查找和排序1_第13张图片
11.归并排序(和MapReduce分而治之的思想一样,先大任务分为小任务,然后小任务一一汇总为一个结果)
1.二路归并排序((n)/2-1趟)
49 38 65 97 76 13 27
6.数据结构期末复习之查找和排序1_第14张图片

你可能感兴趣的:(数据结构,算法)