#include<bits/stdc++.h>
#define M 100
using namespace std;
//递归二分法
int fun(int index,int arr[],int first,int last)
{
int mid,flag=0;
if(first<=last){
mid=(first+last)/2;
if(arr[mid]==index){
flag=1;
cout<<"检索值位于第"<<mid+1<<"位";
flag=1;
}
else if(mid>index){
fun(index,arr,first,mid-1);
}
else if(mid<index){
fun(index,arr,mid+1,last);
}
}
return flag;
}
int main()
{
//选择排序
int arr[M],n;
cout<<"请指定数组元素个数:";
cin>>n;
cout<<"请输入一个数组:"<<endl;
for(int i=0;i<n;i++) cin>>arr[i];
int min,temp;
for(int i=0;i<n-1;i++){
min=i;
for(int j=i+1;j<n;j++){
if(arr[min]>arr[j]){
min=j;
}
}
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
cout<<"排序后的数组为:"<<endl;
for(int i=0;i<n;i++) cout<<arr[i]<<" ";
cout<<endl;
//二分法检索
int index,flag;
cout<<"请输入检索值:";
cin>>index;
flag=fun(index,arr,0,n-1);
if(flag==0){
cout<<"Not found";
}
return 0;
}
二分法的递归主要将while的语句条件放于fun函数中(以此可看出while语句的优越性:由条件判断其结束标志),所以一般递归通常可以替换为while语句的循环语句