数据结构与算法(5)查找

静态查找

若查找目的是为了查询某个特定的数据是否在表中或检索某个特定数据的各种属性,则此类查找表为静态查找表。

1、顺序查找

基本原理:从表一端开始逐个和关键字进行比较,若找到一个记录和给定值相等,则查找成功,反之失败。再简单点就是,一个一个的比大小,看看是否相等。

例子:

         

顺序查找更适合于顺序存储结构和链式存储结构的查找表。顺序查找需要一个个的去比较,效率很低。

2、折半查找(二分查找)

基本原理:1. 把序列分成左中右三部分,左部分小于中间值,右部分大于中间值;

              2. 把给定值与中间值比较,确定下次查找是在左部分还是右部分;

              3. 继续上面两步操作,直到成功或失败。

注意:折半查找需要注意给定的序列必须是一个有序序列。

例子:

                      

3、分块查找

基本原理:顺序查找和二分法查找的折中,先分块,在块中顺序查找。

注意:分成的各块内部数据可能无序;各块之间有序(第二个块中的元素都比第一个块中元素都大);建立了索引表,索引表按关键字有序。

例子:

                   

静态查找表方法的性能分析

                  

动态查找

若再查找的过程中同时插入查找表中不存在的数据,或从查找表中删除已存在的某个数据,则称此类查找表为动态查找表。

1、二叉排序树

定义:1. 若它的左子树非空,则左子树上所有的结点的值均小于根结点的值;

        2. 若它的右子树非空,则右子树上所有的结点的值均大于根结点的值;

        3. 左右子树本身就是两棵二叉排序树。

例子:

                              

2、平衡二叉树

定义:1. 它或者是一棵空树

         2. 树中任一结点的左右子树深度相差不超过1。

注意:从定义我们可得到:想要一颗树平衡,有三种情况,节点的平衡度要么为0,要么为1,要么为-1。(平衡度:节点左子树的高度减去其右子树的高度。

例子:

                      

原文地址:https://www.cnblogs.com/sweetyu/p/5627657.html