折半查找

/**********
*Author:Pug_
*Time:2019-2-26 22:23:57 
*Version:1.0
*FUnction:使用折半查找在数列中查找指定数 
***********/
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>

#define random(x,y)		(rand()%(y-x)+x) 

#define length(array) 	sizeof(array)/sizeof(array[0])

using namespace std;

int main(){ 

	srand((int)time(0));//随机数种子
	
	int searchNumber;
	
	
	int Arr[100] ;
	Arr[0] = 1; 
	
    //数组初始化赋值
	cout<<setw(5)<<left<<Arr[0];
	for (int i = 1;i<length(Arr);i++){ 
		Arr[i] = Arr[i-1]+random(1,5);
		cout<<setw(5)<<left<<Arr[i]; 
	}
	
	cout<<endl
	<<"请输入需要查找的数(搜索范围为"<<Arr[0]<<"~"<<Arr[length(Arr)-1]<<"):";
	  
	cin>> searchNumber;
	
	
	int left = 0;//左指针 
	int right = length(Arr)-1;//右指针 
	int mid = (right +left)/2;//中间指针 
	int count = 0;//计数器 
	 
	while(left<=right)//注意循环的条件 
	{
		count++; 
		mid = (right +left)/2;//重新指定新的中间指针 
		if(Arr[mid] == searchNumber)//查找到要搜索的数 
		{ 
			cout<<endl<<"此数所在位置为Arr["<<mid<<"]"<<endl<<endl;
			break; 
		}
		else 
		if(Arr[mid]<searchNumber) //搜索范围向右缩小 
		{
			left = mid + 1;
		}
		else//搜索范围向左缩小
		{
			right = mid - 1;
		} 
	}
	
	if(left>right) cout<<endl<<"未找到!" <<endl<<endl; 
	
	cout<<"总查找次数:"<<count;
	
	
	return 0;
}



折半查找使用二分查找算法,其时间复杂度为    O(log2n)    !!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值