数据结构 7排序与5查找

排序

冒泡排序

两两比较相邻元素,反序则交换位置,直至没有反序

简单选择排序

通过n-i次的元素比较,找出n-i+1记录中最大元素,并与位置i的记录交换位置

直接插入排序

将一个元素插入到有序表中,得到一个记录数加1的有序表

希尔排序

将相距一个gap的子序列直接插入排序,逐渐缩小gap再进行直接插入排序

堆排序

堆是完全二叉树的一种,分为大顶堆和小顶堆

简单选择排序的优化

先建立一个大顶堆,将根节点与最后一个节点交换,取出最大元素,再建立大顶堆并交换,循环此过程

二路归并排序

先把n个元素当作n个序列,两两排序,再把排序好的两两排序...

快速排序

选择一个比较元素,将比该元素大的元素放到右边,小的元素放到左边,分别对左右便进行快速排序

查找

根据给定值,在查找表中确定一个等于给定值的记录

顺序查找

即线性查找,表是无序的,从表的第一个元素开始,逐个与给定值比较;可以通过使用哨兵优化该查找,无需查找时判断是否越界,在表的末端添加一个元素等于要查找的值,查找到最后时总会相等,不会越界。

有序表查找

表本身是有序的

二分查找,即折半查找,在有序表中,取中间记录作为比较对象,若给定值大于中间记录,则在中间记录的右半区继续二分查找,小于中间记录,则在左半区二分查找,相等则直接返回

线性索引查找

索引就是把一个关键字与关键字对应的记录关联的过程

索引表,即线性索引,就是把索引项集合组织为线性结构

稠密索引,在索引表中,数据集的每个记录对应一个索引项,索引项一定是按照关键字有序排列

分块索引,将数据集的记录分成若干块,块内无序,块间有序

分块索引的查找,块间有序,通过二分查找找到对应的块,块内无序,在块内使用顺序查找

倒排索引,结构包含次关键码和记录号表,记录号表存储具有相同次关键码的所有记录号,最常见的就是WordCount

二叉树

二叉排序树,即二叉查找树,它或者是空树,或者满足以下三个条件

1. 左子树为空,或者左子树所有节点的值小于根节点

2. 右子树为空,或者右子树所有节点的值大于根节点

3. 左右子树也是二叉排序树

平衡二叉树,即AVL树,是一种二叉排序树,每一个节点的左子树和右子树的高度差最多等于1

平衡因子为左子树深度减去右子树深度BF Balance Factor

最小不平衡子树,距离插入节点最近的,且平衡因子绝对值大于1的的节点为根的子树

散列表

散列技术在记录的存储位置和关键字之间确立一个对应的关系f,使得每个关键字key对应一个存储位置f(key)

对应关系f成为散列函数

使用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表

冲突,key1,key2不同,但f(key1) == f(key2),则称为冲突,key1,key2称为散列函数的同义词

直接定址法: f(key) = a * key + b

除留余数法:f(key) = key mod p 



Reference:https://blog.csdn.net/morewindows/article/details/7961256

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值