zoukankan      html  css  js  c++  java
  • 折半查找

    /***
    *Author:cyl
    *Time:2019-2-26 22:23:57 
    *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)    !!!

  • 相关阅读:
    原 java调整数据顺序是奇数位于偶数的前面(思路与实现)
    队列和栈是什么,列出它们的区别?
    python 虚拟环境创建
    系统架构知识
    Git 管理代码
    继承类构造方法使用
    if __name__=="__main__"
    django 项目创建
    python unittest的使用
    python ddt/paramunittest的使用
  • 原文地址:https://www.cnblogs.com/mydrizzle/p/10651240.html
Copyright © 2011-2022 走看看