B+树索引是最为常见,也是在数据库中使用最为频繁的一种索引。在了解索引以前先介绍与之密切相关的一些算法与数据库结构,这有助于读者更好的理解B+树索引的工做方式。java
二分查找法也称为折半查找法,用来查找一组有序记录数组中某一项记录,基本思想是将记录按有序化排列(递增递减),查找过程采用跳跃方式查找,即先以有序数列的重点位置为对比对象,若是要找的元素小于该中点元素,则将待查找序列缩小为左半部分,不然右半部分。以下对五、十、1九、2一、3一、3七、4二、4八、50、52这10个数,要从中查找48这条记录。算法
从上能够看出3次就找到了48这个数,若是要是按顺序查找则须要8次。所以二分查找法的效率(平均来讲)比顺序查找法要好。以下采用java递归方式完成二分查找算法数据库
/** * 递归方法实现二分查找法. * @param Array数组 * @param low 数组第一位置 * @param high 最高 * @param key 要查找的值. * @return 返回值. */ int BinSearch(int Array[],int low,int high,int key) { if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(key<Array[mid]) //移动low和high return BinSearch(Array,low,mid-1,key); else if(key>Array[mid]) return BinSearch(Array,mid+1,high,key); } else return -1; }
二叉查找树或者是一棵空树,或者具备下列性质:数组
如s指向待插入的结点,root指向二叉查找树的根结点,则插入操做的步骤以下:学习
总结:二叉树的构造就是经过不断地插入新的元素。spa
在二叉查找树中查找给定值k的查找过程以下:指针
总结:若二叉查找树接近平衡二叉树,则其时间复杂度为O(logn),若二叉查找树是斜的(如插入是有序插入的状况下),则其实际复杂度为O(n),即退化为线性表。code
设p指向待删除的结点,pre指向待删除结点的父亲,则删除操做视以下状况而定:对象
特殊状况:若待删除结点的右孩子无左子树,也就是说待删结点的右孩子就是右子树的最大值,则直接链接便可,对应为:p->right=min->right,delete min;递归
通常状况:若待删除结点的右孩子有左子树,则将min_pre所指结点的右孩子指向min所只结点的右孩子,对应为:min_pre->right=min->right,delete min;
总结:找到右子树的最小值结点-->链接断开结点-->对最小值结点的上下文作善后工做。
二叉查找树远不止这些内容,在这里之是做为一个引子,从此会对二叉查找树进行详细学习和描述。