19、上午题——数据结构(下)上下一共5分

本文概述了静态查找表(如顺序查找、二分查找、分块查找)和动态查找表(如二叉排序树、B_树、哈希表)的区别,重点讲解了哈希表的工作原理和解决冲突的方法。同时介绍了各种排序算法,如插入排序、希尔排序、计数排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序的原理和特点。
摘要由CSDN通过智能技术生成

查找

静态查找表有:顺序查找、二分查找、分块查找

动态查找表有:二叉排序树、平衡二叉树、B_树、哈希表

顺序查找的平均查找长度为(n+1)/2

二分查找最多比较次数:

二分查找的平均查找长度为

哈希表

具有相同哈希函数值的关键字对该哈希函数来说是同义词

冲突是不可避免的

对n个元素来说,m一般情况下取取接近n但不大于n的质数,m是指模数

装填因子α越大,发生冲突的可能性越大

构造哈希表时应尽量使关键字的所有组成部分都能起作用

对于下面这个题,首先将关键字依次对13取余,找到该关键字对应的地址,如果该地址已经存在值了,那么就将其向后移一个,直到找到空的地址为止,如果到最后还没找到的话就会到最前面开始 

看一下下面的知识点 

小顶堆与大顶堆

小顶堆(小根堆):根节点小于等于左右子树

大顶堆(大根堆):根节点大于等于左右子树

小根堆的交换与大根堆的交换差不多,只是把小的数放上去,大的放下来 

排序

这里有一个错误就是那个快速排序的空间复杂度是O(log2^n) 

对于本身基本有序的数组,直接插入排序的比较次数最小 ,适宜采用直接插入排序算法

对于数组中关键字的取值均在0~9之间的,适宜采用计数排序算法

直接插入排序:每次加的数字都插入到使数组保持有序的

希尔排序:先将现有数字分组,然后依次比较组内的元素大小排好序(比如第1个和第3个是一组,现在希望数组递增,那么如果第1个大于第3个数,就交换他们的文章)

计数排序:统计数组里每个数字出现多少次,然后按顺序输出即可

这里的时间复杂度是O(n),大概是因为本身就是基本有序的,按最好时间复杂度算的 

简单选择排序:每次把最小的(最大的)放在最前面,然后依次找

堆排序:大根堆排递增序列,小根堆排递减序列

以排递增序列为例,每次按大根堆排好树之后,将第一个元素和最好一个元素排好之后将最大的那个元素拿开,然后剩下的继续这么操作即可

冒泡排序:每次把最大的(最小的)排到最后面去

快速排序:

取首元素快排:从后往前,再从前往后

取尾元素快排:从前往后,再从后往前

以下面这个为例:先从前往后找第一个大于4的为8,将j位置上的数改成8,然后从后往前找第一个小于4的为3,将i位置上的数改成3;然后从前往后找大于4的为7,将j位置上的数改成7,然后从后往前找小于4的为1,将i位置上的数改成1,然后i=j,此时第一趟结束

这里的计算时间是O(n),其实很好理解,i一开始在最左边,j一开始在最右边,不断向中间靠拢,直到i=j结束,那么相当于遍历了一遍数组 

归并排序采用分治法

直接看下面这个例子,就是先将这个序列不断划分,直到化成单个的,然后再将其不断合并,直到整个序列有序

看下面这个题,实际上就是问归并排序的采用的是分治及归并排序的时间复杂度 

看下面这个题,可知当两个序列交替时,归并时比较次数最多 

背过背过 

 

这个杂题主要是我想了解一下 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值