二分查找算法是一種快速的查找算法。當我們再一個數組中查找是否存在某個數時,通常是直接遍歷
這個數組直到找到這個數,時間復雜度為O(n)試想如果數據量很大,上億呢,怎么辦,這里我們可以用
一種簡單快速的的查找算法--二分查找算法也叫做折半查找算法。
二分查找算法的算法思維:
1.首先查找數組必須是有序的(假設為升序)。
2.取查找數組中間的數作為基准,如果需要查找的數據大於基准說明該數存在於 數組的左邊。反之存在於基准右邊。
3 假設待查找的數小於基准,那么將基准換成左子數組的中間的數,重復步驟2,直到找到該數。
很顯然對於上億規模的數據查找,我們可以將待查找的數據進行排序,然后再用二分查找進行查找。
二分查找的時間復雜度為O(logn),
logn是什么意思呢 意思是當我們在1000個元素中查找某個元素時 只需要10次比較就可以找到該元素
記住二分查找只能針對有序數據,切記這一點。
二分查找實現如下:
1 #include <iostream> 2 using namespace std; 3 4 bool FindByTwo(int *nums,int numsSize,int number) 5 { 6 int mid; 7 int left=0; 8 int right=numsSize-1; 9 10 11 while(left!=right) 12 { 13 mid=(left+right)/2; 14 if(number==nums[mid]) 15 { 16 return true; 17 } 18 else 19 { 20 if(number>nums[mid]) 21 { 22 left=mid+1; 23 } 24 if(number<nums[mid]) 25 { 26 right=mid-1; 27 } 28 } 29 } 30 31 32 return false; 33 } 34 35 36 int main() 37 { 38 39 int nums[10]={1,2,3,4,5,6,7,8,9,10}; 40 int numsSize=10; 41 int number=8; 42 if(FindByTwo(nums,numsSize,number)) 43 { 44 cout<<"Find The number: "<<number<<endl; 45 } 46 else 47 { 48 cout<<"Can not Find The number: "<<number<<endl; 49 } 50 return 0; 51 }
運行截圖:
當查找8時:
當查找20時:
OK,二分查找就介紹結束了哦