标签:blog ar io os sp for div 问题 log
二分查找感觉还是挺简单的,我写的这程序是处理有序表的查找,主要思想是这么回事:
已知元素个数,找到位于中间元素的值a[mid],并与要找的value比较,如果大于,那么就从0到mid-1中继续查找。
要考虑的问题,如果元素个数为0,数组中没有要查找的元素,还有找到元素怎么返回。
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define MAX 1000
int cos;
void find(int a[],int v,int l,int r)
{
if(l>r)
{
cos=-1;
return;
}
int mid=(l+r)/2;
if(a[mid]>v)
find(a,v,l,mid-1);
else if(a[mid]<v)
find(a,v,mid+1,r);
else
cos=mid;
return ;
}
void find(int a[],int n,int v)
{
if(n==0)
{
cos=-1;
return;
}
int l=0,r=n-1;
cos=-1;
while(l<=r)
{
int mid=(l+r)/2;
if(a[mid]>v)
r=mid-1;
else if(a[mid]<v)
l=mid+1;
else
{
cos=mid;
break;
}
}
return ;
}
int main()
{
int a[MAX];
int n,v;
printf("输入元素个数:\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("输入查找元素\n");
scanf("%d",&v);
//find(a,v,0,n);
find(a,n,v);
if(cos==-1)
printf("没有元素\n");
else
{
printf("元素下表:%d\n",cos);
}
system("pause");
}
标签:blog ar io os sp for div 问题 log
原文地址:http://www.cnblogs.com/yang95/p/4171268.html