因爲去跳啦啦操沒有上課...算法
折半查找,又稱做二分查找。這個查找的算法的特色,就是,要求數據要是有序的。數組
1 ,存儲結構必定是順序存儲
2 ,關鍵字大小必須有序排列性能
而後,利用這組有序的數據之間的關係,來進行折半的查找。.net
比方說,這組數據是升序排列的。一開始,首先對比這組數據的中間的項與關鍵值(key)的關係。如果關鍵值(key)>中間值,則說明,關鍵值(key)在中間值的右側,所以將這組數據的區間縮小爲以中間值爲最左側的小區間。而後,繼續用中間值進行比較,以此類推,最終確定會找到在數組當中與之匹配的關鍵值,直到區間縮小爲0還沒找到,就只能是關鍵值(key)不在數組當中blog
折半查找,優勢是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。所以,折半查找方法適用於不常常變更而查找頻繁的有序列表。索引
二分查找的基本思想是將n個元素分紅大體相等的兩部分,取a[n/2]與x作比較,若是x=a[n/2],則找到x,算法停止。若是x< a[n/2],則只要在數組a的左半部分繼續搜索x,若是x>a[n/2],則只要在數組a的右半部搜索x。一直這樣搜索下去,時間複雜度爲O(log N)get
公式:在n趨於無窮大時,折半查找的ASL=((n+1)log2(n+1))/n - 1,當n大於50時,ASL約等於log2(n+1)-1;搜索
推導:設分塊查找中將長爲 n 的表分紅均等的 b 個塊,每塊 s 個元素,則 b =(n/s)上取整,若是索引表中採用折半查找,則ASL=(s+1)/2+log2(b+1)-1方法