二分查找学习总结

二分查找要求:
    ①、顺序存储结构
    ②、元素有序

二分查找非递归Java实现

//二分查找非递归实现
public class BinarySearch {
    public static int BinSearch(int a[],int key){
        int n = a.length;
        int low=0,high=n-1,mid;
        while(low<=high){
            mid = (low+high)/2;
            if(key==a[mid]){
                return mid;        //查找成功,返回key所在下标
            }else if(key<a[mid]){
                high = mid -1;
            }else{
                low = mid + 1;
            }
        }
        return -1;               //查找失败
    }
    public static void main(String[] args) {
        int a[]={2,4,7,18,25,34,56,68,89};
        int key = 68;
        int index = BinarySearch.BinSearch(a, key);
        System.out.println("要查找元素的下标为(如下标为-1,则查找失败):"+index);
    }
}

二分查找非递归C++实现

//二分查找非递归算法
 #include <iostream>
 using namespace std;
 //二分查找算法 
 int BinarySearch(int a[],int key,int low,int high){
     int mid;
     while(low<=high){
        mid = (low+high)/2;
        if(key==a[mid]){
            return mid;
         }else if(key<a[mid]){
            high = mid - 1;
        }else{
            low = mid + 1;
         }
    } 
         return -1;
 } 
 int main()
 {
    int a[]={2,4,7,18,25,34,56,68,89};
    int key = 68;
    int n = (sizeof(a) / sizeof(a[0]));
    int index = BinarySearch(a,key,0,n-1);
    cout<<"有序数组为:"<<endl; 
    for(int i=0;i<n;i++){
        cout<<a[i]<<" "; 
    }
    cout<<"\n要查找的元素key为:"<<key<<endl; 
    cout<<"要查找元素的下标为:"<<index<<endl; 
    return 0;
 }

猜你喜欢

转载自www.cnblogs.com/hglibin/p/8974297.html