二分查找
二分查找又叫做折半查找。
要求数据必须是按关键字大小有序排列的。
问题描述
在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);
}
学习存档分享。