關於二分查找算法(也叫折半查找)


二分查找算法是一種快速的查找算法。當我們再一個數組中查找是否存在某個數時,通常是直接遍歷

這個數組直到找到這個數,時間復雜度為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,二分查找就介紹結束了哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM