c++ 二分查找算法

c++ 二分查找

#include<iostream>
using namespace std;
//要求數組從小到大排序 
int binarysearch(int *a,int low,int high, int target){  //遞歸實現 
	if(low>high)
		return -1;
	int middle=(low+high)/2;
	if(a[middle]==target) 
    	return middle;
    
	if(a[middle]<target)
		return binarysearch(a,middle+1,high,target); //這裏必須是middle+1,不然可能\
		無法跳出遞歸,比如middle是6,high是7.如果傳遞進去6和7,那麼middle永遠是6\
		會陷入循環遞歸,無法跳出 
	 
	else
		return binarysearch(a,low,middle-1,target); 	
}

int binarysearch1(int *a,int n,int target){  //循環實現 
	int low=0,high=n-1,middle;
	while(low<=high){
		middle=(low+high)/2;
		if(a[middle]==target)
			return middle;
		else if(a[middle]<target)
			low=middle+1;
		else 
			high=middle-1;	
	}
	return -1;
} 

int main() {
	
	int a[10]={2,3,5,6,8,9,12,14,15,17};
	for(int i=0;i<10;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	 
	cout<<"index of 12  "<<binarysearch(a,0,9,12)<<endl;
	cout<<"index1 of 8  "<<binarysearch1(a,10,8)<<endl<<endl;
	cout<<"index of 20  "<<binarysearch(a,0,9,20)<<endl;
	cout<<"index1 of 20  "<<binarysearch1(a,10,20)<<endl;
	
}

 

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