#include<iostream>
using namespace std;
int main()
{
int SX_Find(int array[],int n,int k); //折顺序查找
int BinSearch1(int array[],int n,int k);//非递归算法
int BinSearch2(int array[], int low, int high, int k);//递归算法
int *array,n,k,i1,i2,i3,i;
cout<<"数组的长度为:";
cin>>n;
cout<<"要查找的数为:";
cin>>k;
array=new int [n];
cout<<"输入数组中的数值:";
for(i=0;i<n;i++)
cin>>array[i];
i1=SX_Find(array,n,k);
i2=BinSearch1(array,n,k);
i3=BinSearch2(array,0,n-1,k);
if(i==0)cout<<"该数不存在!"<<endl;
else
cout<<"该数在数组中的下标为:"<<i1<<" "<<i2<<" "<<i3<<endl;
return 0;
}
int SX_Find(int array[],int n,int k)
{
int i;
array[0]=k;
i=n;
while(array[i]!=k)
i--;
return i;
}
int BinSearch1(int array[],int n,int k)//非递归算法
{
int low=0,high=n-1,mid;
while (low<=high)
{
mid=(low+high)/2;
if (k<array[mid]) high=mid-1;
else if (k>array[mid]) low=mid+1;
else return mid;
}
return 0;
}
int BinSearch2(int array[], int low, int high, int k)//递归算法
{
int mid;
if (low>high) return 0;
else {
mid=(low+high)/2;
if (k<array[mid])
return BinSearch2(array, low, mid-1, k);
else if (k>array[mid])
return BinSearch2(array, mid+1, high, k);
else return mid;
}
}