二分查找--递归和非递归(c++)考研自用

2021年09月15日 阅读数:3
这篇文章主要向大家介绍二分查找--递归和非递归(c++)考研自用,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
/**
二分查找
*/

#include<iostream>
#include<string>

using namespace std;
//非递归形式
int bin_search(int A[],int n,int key){
int mid ,low=0,high=n-1;
while(low<=high){
    mid = (low+high)/2;
    if(A[mid]==key) return mid; //返回查找到元素的下标
    else if(key<A[mid]){
            high = mid-1;
    }
    else low = mid+1;
}
return -1; //表示没有查到
}
//递归形式
int bin_search_digui(int A[],int low,int high,int key){
    int mid;
    if(low>high) return -1;
    else{
        mid = (low+high)/2;
    if(key==A[mid]) return mid;
    else if(key>A[mid]){
        bin_search_digui(A,mid+1,high,key);
    }else{
        bin_search_digui(A,low,mid-1,key);
    }
    }
}

int main(){
int A[10]={1,12,32,45,65,87,98,123,124,156};
cout<<"1.非递归形式"<<endl;
cout<<"排序以后的下标为:"<<bin_search(A,10,12)<<endl;
cout<<"排序以后的结果为:"<<A[bin_search(A,10,12)]<<endl;
cout<<"2.递归形式的"<<endl;
cout<<"排序以后的下标为:"<<bin_search_digui(A,0,10,12)<<endl;
cout<<"排序以后的结果为:"<<A[bin_search_digui(A,0,10,12)]<<endl;
}