二分查找代码
Posted westlife-11358
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找代码相关的知识,希望对你有一定的参考价值。
也叫折半查找。
优点:比较次数少,查找速度快,平均性能好。
缺点:查找的数组必须为排序好的数组。
时间复杂度:O(logN)
代码:(递归:用栈保存结果空间消耗严重)
#include <iostream> using namespace std; //二分查找 返回位置标号 时间复杂度O(logN) int binarySearch(int list[],int left,int right,int number) { if(list==NULL) return -1; int index=0; int mid=(right+left)/2; if(left>right) { return -1; } if(number==list[mid]) { index=mid; return index; } else if(number>list[mid]) { binarySearch(list,mid+1,right,number); } else { binarySearch(list,left,mid-1,number); } } int main() { int a[]={1,3,5,7,9,11,14,16,17,20}; int left = 0; int right = sizeof(a)/sizeof(a[0])-1; int index =binarySearch(a,left,right,88); cout<<index<<endl; return 0; }
非递归:(能用循环不用递归)
#include <iostream> using namespace std; //二分查找 返回位置标号 时间复杂度O(logN) int binarySearch(int list[],int left,int right,int number) { if(list==NULL) return -1; while(left<right) { int mid=(right+left)/2; if(list[mid] == number) { return mid; } else if(number > list[mid]) { left=mid+1; } else if(number < list[mid]) { right=mid-1; } } return -1; } int main() { int a[]={1,3,5,7,9,11,14,16,17,20}; int left = 0; int right = sizeof(a)/sizeof(a[0])-1; int index =binarySearch(a,left,right,11); cout<<index<<endl; return 0; }
以上是关于二分查找代码的主要内容,如果未能解决你的问题,请参考以下文章