折半查找法的递归与非递归写法——C++

介绍:

折半查找(BinarySearch)也称二分查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构, 而且表中元素按关键字有序排列

查找过程:

从表的中间记录开始,如果给定值和中间记录的关键字相等, 则查找成功;如果给定值大于或者小千中间记录的关键字, 则在表中大于或小千中间记录的那一半中查找,这样重复操作, 直到查找成功,或者在某一步中查找区间为空, 则代表查找失败。折半查找每一次查找比较都使查找范围缩小一半,与顺序查找相比,很显然会提高查找效率。 为了标记查找过程中每一次的查找区间,下面分别用low和high来表示当前查找区间的下界和上界,mid为区间的中间位置。

递归与非递归写法:

#include<iostream>
using namespace std;

int a[10]={5,15,24,35,65,78,88,96,101,321};
int key=96;

int Search_binary(int a[],int low,int high,int key){
	//递归写法
	int i=low,j=high,mid=(low+high)/2;
	if(low>high) return -1;
	if(a[mid]==key) return mid;
	if(a[mid]>key) return Search_binary(a,low,mid-1,key);
	if(a[mid]<key) return Search_binary(a,mid+1,high,key);
	return -1;
}

int Binart_search(int a[],int low,int high,int key){
	//非递归写法
	int i=low,j=high,mid;
	while(i<=j){
		mid=(i+j)/2;
		if(key==a[mid]) return mid;
		else if(key<a[mid]) j=mid-1;
		else i=mid+1;
	}
	return -1;
}

int main(){
	cout<<Search_binary(a,0,9,key)<<endl<<Binart_search(a,0,9,key);
	return 0;
}

运行结果:

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章