#include "stdafx.h"
#include <iostream.h>
int getIndex(int *a,int n,int data)//查找值为data的元素在数组中的下标位置,采用二分查找非递归的形式;
{
if (a==NULL||n<=0)
{
return -1;
}
int start=0;
int end=n-1;
while (start<end)
{
int mid=start+(end-start)/2;
if (data==a[mid])
{
return mid;
}
else if (data>a[mid])
{
mid=mid+1;
}
else
mid=mid-1;
}
return -1;
}
int getIndexDigui(int *a,int data,int start,int end)//递归
{
int mid=start+(end-start)/2;
if (start>end)
{
return -1;
}
if (data==a[mid])
{
return mid;
}
else if (data>a[mid])
{
return getIndexDigui(a,data,mid+1,end);
}
else
return getIndexDigui(a,data,0,mid-1);
}
int getIndexOwn(int *a,int n,int data)
{
if (a==NULL||n<=0)
{
return -1;
}
else
return getIndexDigui(a,data,0,n-1);
}
int main(int argc, char* argv[])
{
int a[]={2,4,5,7,8,9};
int length=sizeof(a)/sizeof(int);
int index=getIndex(a,length,5);
cout<<"查找的元素下标为:"<<index<<endl;
int index2=getIndexOwn(a,length,7);
cout<<"采用递归调用的形式的下标为:"<<index2<<endl;
return 0;
}