二分查找(递归和非递归实现)

cpp

#include <iostream>
#include <algorithm>
using namespace std;
//非递归实现
int BinarySearch1(int*a, int size,int key){
    
    
	int low =  0;
	int high = size - 1;
	while(low <= high){
    
    
		int mid = (high + low) / 2;
		if(a[mid] > key){
    
    
			high = mid - 1;
		}else if(a[mid] < key){
    
    
			low = mid + 1;
		}else{
    
    
			return mid;
		}
	}
	return -1;
}
//递归实现
int BinarySearch2(int*a, int size,int key){
    
    
	int low =  0;
	int high = size - 1;
	if(low <= high){
    
    
		int mid = (high + low) / 2;
		if(a[mid] > key){
    
    
			high = mid - 1;
			return BinarySearch2(&a[low],high - low + 1,key);
		}else if(a[mid] < key){
    
    
			low = mid + 1;
			return BinarySearch2(&a[low],high - low + 1,key);
		}else{
    
    
			return mid;
		}
	}
	return -1;
}
int main(){
    
    
	int a[] = {
    
    2,0,9,3,8,10,5};
	int size = sizeof(a) / sizeof(int);
	sort(a,a + size);
	for(int i = 0;i < size;i ++){
    
    
		cout<<a[i]<<" ";
	}
	cout<<endl;
	int b = 0;
	while(cin>>b){
    
    
		if(BinarySearch2(a,size,b) >= 0){
    
    
			cout<<b<<"存在"<<endl;
		}else{
    
    
			cout<<b<<"不存在"<<endl;
		}
	}
	return 0;
} 

Java

import java.util.Arrays;
import java.util.Scanner;

public class BinarySearch {
    
    
    public static  int rank(int[] arr,int key){
    
    
        int lo = 0;
        int hi = arr.length - 1;
        while (lo <= hi){
    
    
            int mid = lo + (hi - lo) / 2;
            if (arr[mid] > key){
    
    
                hi = mid - 1;
            }else if(arr[mid] < key){
    
    
                lo = mid + 1;
            }else{
    
    
                return mid;
            }
        }
        return -1;
    }
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    2,5,1,4,9,21,13,90,66};
        Arrays.sort(arr);
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
    
    
            String str = sc.next();
            int i = Integer.parseInt(str);
            if (rank(arr,i) >= 0){
    
    
                System.out.println(i + "存在");
            }eles{
    
    
            	System.out.println(i + "不存在");
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45867397/article/details/107175995