您的位置:首页 > 其它

关于二分查找算法(也叫折半查找)

2016-04-07 19:41 225 查看
二分查找算法是一种快速的查找算法。当我们再一个数组中查找是否存在某个数时,通常是直接遍历这个数组直到找到这个数,时间复杂度为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,二分查找就介绍结束了哦

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: