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;
總結:找到右子樹的最小值結點-->鏈接斷開結點-->對最小值結點的上下文作善後工做。
二叉查找樹遠不止這些內容,在這裏之是做爲一個引子,從此會對二叉查找樹進行詳細學習和描述。