二分查找算法

来源:互联网 发布:淘宝显示不是私密连接 编辑:程序博客网 时间:2024/06/06 15:37

在一个数组中查找某个值,经常用到。可以采用遍历方法,对每一个进行比较,是否相等。但是这种方法查找比较慢,并且效率不高。

所以可以采用二分查找来更好解决这种问题。

二分查找要求有下面两个:

   1:必须采用顺序排列。

   2:并且这个排列是有序的。

在一个数组array长度为M中,要查找某个元素N,将N和array[M/2]进行比较。如果array[M/2]>N则继续在0-M/2之间继续循环查找,直到

找到退出。

实例代码如下:

#include<iostream>using namespace std;void print(int a[]){  for(int i=0;i<9;i++){cout<<a[i]<<" ";}cout<<endl;}int BinSearch(const int *Array,int start,int end,int key){    int mid;    int left=start;    int right=end;     while(left<=right)    {        mid=(left+right)/2;        if(key==Array[mid])  ///如果找到就返回数组下标return mid;        else if(key<Array[mid]) ///中间值比要查找的大right=mid-1;        else if(key>Array[mid]) ///中间值比要查找的小left=mid+1;    }    return -1;//找不到就返回-1    }void BubbleSort(int a[], int n){  int temp,i,j;    for(i =0 ; i< n-1; ++i) {  ///n个数需要n-1次循环        for(j = 0; j < n-i-1; ++j) {  ///每次循环需要n-i-1次比较             if(a[j] > a[j+1])              {                  temp = a[j] ;a[j] = a[j+1] ; a[j+1] = temp;              } //if         }  //forprint(a);//输出每一次排序效果     } //for }  int main(){int a[]={3,1,2,8,5,6,12,48,69};int mid;BubbleSort(a,9);///进行排序操作mid=BinSearch(a,0,9,12);cout<<mid<<":"<<a[mid]<<endl;return 0;}
另外函数部分还可以采用递归方式进行二分查找:

int BinSearch(const int *Array,int start,int end,int key){     int mid,low,high;     low=start;     high=end;     if (low<=high)      {          int mid = (low+high)/2;          if(key == Array[mid])              return mid;          else if(key<Array[mid])              return BinSearch(Array,low,mid-1,key);          else if(key>Array[mid])              return BinSearch(Array,mid+1,high,key);      }      else          return -1;    }



0 0
原创粉丝点击