关于二分查找算法(也叫折半查找)
二分查找算法是一种快速的查找算法。当我们再一个数组中查找是否存在某个数时,通常是直接遍历
这个数组直到找到这个数,时间复杂度为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,二分查找就介绍结束了哦
作者:vpoet
出处:http://www.cnblogs.com/vpoet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/vpoet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。