二分查找代码

匿名 (未验证) 提交于 2019-12-03 00:40:02

也叫折半查找。

优点:比较次数少,查找速度快,平均性能好。

缺点:查找的数组必须为排序好的数组。

时间复杂度: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; }

 

原文:https://www.cnblogs.com/westlife-11358/p/9304118.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!