1查找基础,顺序查找

查找成功的ASL

android折半查找 折半查找查找失败asl_二叉排序树


查找失败的ASL

android折半查找 折半查找查找失败asl_结点_02


查找算法

android折半查找 折半查找查找失败asl_android折半查找_03

2折半查找和折半查找判定树

mid=(low+high)/2 向下取整

android折半查找 折半查找查找失败asl_android折半查找_04


要查找的元素8比mid所在位置元素大,所以low=mid+1

android折半查找 折半查找查找失败asl_android折半查找_05


8比当前mid[4]=5要大,继续low=mid+1,即low=high

android折半查找 折半查找查找失败asl_结点_06


android折半查找 折半查找查找失败asl_android折半查找_07


mid[5]=8与要查找的元素8相等,查找结束。

android折半查找 折半查找查找失败asl_结点_08

折半查找判定树

mid为2,取出来

android折半查找 折半查找查找失败asl_二叉排序树_09


计算2左边的mid,mid=(0+1)/2=0

android折半查找 折半查找查找失败asl_二叉排序树_10


把mid取出来作为一个结点

android折半查找 折半查找查找失败asl_android折半查找_11


android折半查找 折半查找查找失败asl_android折半查找_12


对0左空节点就不做操作了,

然后继续对结点1做mid=(low+high)/2=1

android折半查找 折半查找查找失败asl_android折半查找_13


android折半查找 折半查找查找失败asl_折半查找_14


android折半查找 折半查找查找失败asl_折半查找_15

开始划分右边

android折半查找 折半查找查找失败asl_android折半查找_16

先处理左边这一部分

android折半查找 折半查找查找失败asl_结点_17


android折半查找 折半查找查找失败asl_结点_18


android折半查找 折半查找查找失败asl_折半查找_19


android折半查找 折半查找查找失败asl_折半查找_20


android折半查找 折半查找查找失败asl_结点_21


比如要找到结点1,就是比较2到1路径上的三个结点

android折半查找 折半查找查找失败asl_android折半查找_22


蓝色-查找失败来到的位置

android折半查找 折半查找查找失败asl_折半查找_23


ASL1成功,ASL2失败

android折半查找 折半查找查找失败asl_结点_24


二分查找(折半查找)

android折半查找 折半查找查找失败asl_二叉排序树_25

分块查找

android折半查找 折半查找查找失败asl_二叉排序树_26


android折半查找 折半查找查找失败asl_android折半查找_27


在这个结构体中的元素顺序是有序的,接下来用折半查找的方法

android折半查找 折半查找查找失败asl_折半查找_28


android折半查找 折半查找查找失败asl_android折半查找_29


android折半查找 折半查找查找失败asl_结点_30

android折半查找 折半查找查找失败asl_折半查找_31


android折半查找 折半查找查找失败asl_android折半查找_32

再来看一个分块查找的例子

android折半查找 折半查找查找失败asl_二叉排序树_33


android折半查找 折半查找查找失败asl_结点_34


此时还需要在分块里面去找,上图只是找到了索引所在的位置范围。

android折半查找 折半查找查找失败asl_折半查找_35


再看一个例子

android折半查找 折半查找查找失败asl_二叉排序树_36


android折半查找 折半查找查找失败asl_android折半查找_37


android折半查找 折半查找查找失败asl_二叉排序树_38


android折半查找 折半查找查找失败asl_结点_39


high<low 表明查找结束,就去low所指的块中查找元素。下面看一种特殊情况。

此时low所指的块为空

android折半查找 折半查找查找失败asl_折半查找_40

二叉排序树

android折半查找 折半查找查找失败asl_折半查找_41


android折半查找 折半查找查找失败asl_结点_42


二叉排序树查找的算法

android折半查找 折半查找查找失败asl_二叉排序树_43


递归版 √

android折半查找 折半查找查找失败asl_二叉排序树_44


5二叉排序树 插入删除

android折半查找 折半查找查找失败asl_android折半查找_45


android折半查找 折半查找查找失败asl_结点_46


android折半查找 折半查找查找失败asl_android折半查找_47


android折半查找 折半查找查找失败asl_二叉排序树_48


android折半查找 折半查找查找失败asl_折半查找_49


android折半查找 折半查找查找失败asl_结点_50


android折半查找 折半查找查找失败asl_折半查找_51


android折半查找 折半查找查找失败asl_结点_52


android折半查找 折半查找查找失败asl_android折半查找_53


android折半查找 折半查找查找失败asl_结点_54


android折半查找 折半查找查找失败asl_折半查找_55


android折半查找 折半查找查找失败asl_android折半查找_56


B树、B+树

B树:可以有多叉

android折半查找 折半查找查找失败asl_折半查找_57


android折半查找 折半查找查找失败asl_android折半查找_58


android折半查找 折半查找查找失败asl_折半查找_59


android折半查找 折半查找查找失败asl_android折半查找_60


android折半查找 折半查找查找失败asl_android折半查找_61


五阶B树

android折半查找 折半查找查找失败asl_二叉排序树_62


多少阶=最大个数+1

android折半查找 折半查找查找失败asl_折半查找_63


android折半查找 折半查找查找失败asl_android折半查找_64


android折半查找 折半查找查找失败asl_二叉排序树_65


android折半查找 折半查找查找失败asl_结点_66


android折半查找 折半查找查找失败asl_结点_67


android折半查找 折半查找查找失败asl_结点_68


拆分,节点个数/2,向上取整。 5/2=3,所以把6当成根节点

android折半查找 折半查找查找失败asl_二叉排序树_69


此时关键的个数又超出了范围。

android折半查找 折半查找查找失败asl_二叉排序树_70


android折半查找 折半查找查找失败asl_android折半查找_71

android折半查找 折半查找查找失败asl_android折半查找_72


android折半查找 折半查找查找失败asl_折半查找_73


android折半查找 折半查找查找失败asl_结点_74


android折半查找 折半查找查找失败asl_二叉排序树_75


android折半查找 折半查找查找失败asl_结点_76


android折半查找 折半查找查找失败asl_结点_77


android折半查找 折半查找查找失败asl_结点_78


android折半查找 折半查找查找失败asl_android折半查找_79


如果要删除的结点在终端结点,并且终端结点的个数大于2,就可直接删除。

android折半查找 折半查找查找失败asl_android折半查找_80


删除非终端关键字,取左最大,或者右最小。

android折半查找 折半查找查找失败asl_结点_81


让18上去,17下来,然后就可以删除15了

android折半查找 折半查找查找失败asl_android折半查找_82


android折半查找 折半查找查找失败asl_折半查找_83


6下来

android折半查找 折半查找查找失败asl_折半查找_84


android折半查找 折半查找查找失败asl_折半查找_85


android折半查找 折半查找查找失败asl_二叉排序树_86

android折半查找 折半查找查找失败asl_折半查找_87


android折半查找 折半查找查找失败asl_android折半查找_88


android折半查找 折半查找查找失败asl_结点_89

android折半查找 折半查找查找失败asl_折半查找_90


android折半查找 折半查找查找失败asl_折半查找_91

android折半查找 折半查找查找失败asl_折半查找_92