二分查找 c++

二分查找
二分查找又叫做折半查找。
要求数据必须是按关键字大小有序排列的

问题描述
在n个元素s1…sn,现在在这n个元素中找到一个指定元素x。

求解步骤
a) 设置数组list[n]来存放已经排好序的元素。low,high分别表示查找范围在数组中的上界和下界。mid表示中间位置,key为查找的关键字。

b) 令 low=0,即指数组中的第一个元素。high=n-1,指数组中的最后一个元素。

c) mid=(high+low)/2,查找范围的中间位置。

d) 根据判断条件写完接下来的代码…看代码能看懂。

/*
功能:二分查找
作者:ltj
创作时间:2021/3/15 
*/
#include<iostream>
using namespace std;
int BSearch(int list[],int key,int low,int high){
    
     //递归法  数组,关键字,第一个位置数组下标,最后位置数组下标
	   if(low<=high){
    
    
		int mid=(high+low)/2;
		if(key==list[mid]){
    
       //当要查找的值等于中间值时 直接输出 
			return mid;
		 }
		else if(key<list[mid]){
    
    
			return BSearch(list,key,low,mid-1);
    	}   
		else
			return BSearch(list,key,mid+1,high);
   }
} 

int BSearch1(int list1[],int key1,int begin,int end){
    
     //循环法 
	   while(begin<=end){
    
    
		int mid1=(begin+end)/2;
		if(key1==list1[mid1]){
    
       //当要查找的值等于中间值时 直接输出 
			return mid1;
		 }
		else if(key1>list1[mid1]){
    
    
			begin=mid1+1; 
    	}   
		else if(key1<list1[mid1]){
    
    
			end=mid1-1;
		}	
   }
        return -1;
} 

int main(){
    
    
	int list[]={
    
    1,4,7,9,12,16,17};
	int list1[]={
    
    5,6,7,10,14,18,20};
	cout<<"所查找值在数组中的位置是:"<<BSearch(list,4,0,6)<<endl;
	cout<<"所查找值在数组中的位置是:"<<BSearch1(list1,5,0,6);
}

学习存档分享。

猜你喜欢

转载自blog.csdn.net/qq_46606018/article/details/114851812