二分查找算法实现

来源:互联网 发布:node fs模块 编辑:程序博客网 时间:2024/05/21 18:04
#include <iostream>
#include<algorithm>
using namespace std;
#define N 20
int  binary_chop(int a[],int n,int j,int k){//二分查找算法
 int low,high,mid;
 low=1;high=n;
 while(low<=high){
  mid=(low+high)/2;         
  if(a[mid]==k) {j=mid;break;}  //找到即返回下标
  else if(a[mid]>k)high=mid-1;  //寻找的值小于中间值,则在左边一般查找
  else low=mid+1;               //寻找的值大于中间值,则在右边一半查找
 }
  return j;                        //返回k的下标值,找不到返回0
}
int main(int argc, char** argv) {
 
 int a[N];
 int n; cin>>n;//定义问题的规模大小,并由用户输入问题规模大小,即数组长度;
 int W;cin>>W;//输入要寻找的数
  for(int i=1;i<=n;i++){
   cin>>a[i];
  }//输入数组元素;
 
 sort(a+1,a+n+1);  //对数组进行排序
 
// for(int i=1;i<=n;i++){           //输出排序后的数组元素,用于检测
//   cout<<a[i];
//  }//输出数组元素;
 
 cout<<binary_chop(a,n,0,W);
 return 0;
}
1 0