关闭

二分法查找

649人阅读 评论(0) 收藏 举报

#include <iostream.h>
#include <stdio.h>
#include <windows.h>
int erfen(int sum[],int x,int n){
 int front=0,rear=n-1;
 while(n/2+1){                          //设置为n/2+1以减小时间复杂度
  if(sum[(front+rear)/2]>x){        //如果这个数在前半部分
   rear=(front+rear)/2;
   n--;
  }
   else if(sum[(front+rear)/2]<x){//如果这个数在后半部分
    front=(front+rear)/2+1;
    n--;
   }
   else if(x==sum[(front+rear)/2]){//如果找到这个数了
    return (front+rear)/2+1;
    n--;
        break;
   }

 }
 if((n/2+1)==0){                            //判断是否找到了
   printf("not find/n");
   exit(0);
   return 0;   
  }
}

 


void main(){
 int sum[9]={10,11,12,13,14,15,16,17,18},res;
 int i=0;
 cout<<"请输入你要查找的数:"<<endl;
 cin>>i;
 res=erfen(sum,i,9);
 cout<<"第"<<res<<"个"<<endl;
}
 
运行结果:

请输入你要查找的数:

15

第六个

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:61649次
    • 积分:1126
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:12篇
    • 译文:0篇
    • 评论:17条
    最新评论