zoukankan      html  css  js  c++  java
  • 二分查找算法-精简 稳定

    //*************************************
    // 函数名称:FineTab  二分查找算法 ->查温度表
    // 函数功能:查找数据在表中相应的位置 表中数据从大到小
    // 入口參数:表地址、表长度、要查找的数据
    // 出口參数:无
    // 返 回 值:数据在表中的位置
    //***************************************/
    
    int FineTab(int *a,int TabLong,int data)//查表数据为从大到小排序
    {
    		int st,ed,m ;
    		int i ;
    	
    		st = 0 ;//初始化要查询的数为第一个
    		ed = TabLong-1 ;//最后一个数
    		i = 0  ;
    	
    		if(data >= a[st]) return st ;
    		else if(data < a[ed]) return ed ;
    	
    		while(st < ed)
    		{
    			m = (st+ed)>>1 ;//二分取要查询的中间值
    	
    			if(data == a[m] ) break ;
    			if(data < a[m] && data > a[m+1]) break ;
    			
    			
    			if(data > a[m])	ed = m ;					
    			else st = m ;	
    			
    			if(++i > TabLong) break ;
    		}
    	
    		if(st > ed ) return 0 ;	
    		return m ;
    }
    //*************************************
    // 函数名称:FineTab  二分查找算法 ->查温度表
    // 函数功能:查找数据在表中相应的位置 表中数据从小到大排序
    // 入口參数:表地址、表长度、要查找的数据
    // 出口參数:无
    // 返 回 值:数据在表中的位置
    //***************************************/
    
    
    int Fine1Tab(int *a,int TabLong,int data)
    {
    		int st,ed,m ;
    		int i ;
    	
    		st = 0 ;//初始化要查询的数为第一个
    		ed = TabLong-1 ;//最后一个数
    		i = 0  ;
    	
    		if(data <= a[st]) return st ;//小于等于第一个数 ,查询值为0。即为第一个数
    		else if(data >= a[ed]) return ed ;//大于等于最后一个数。查询之为最后一个数
    	
    		while(st < ed)//循环查询
    		{
    	    	m = (st+ed)>>1 ;//二分取要查询的中间值
    			if(data == a[m] ) break ;//刚好是要查询的值。结束查询
    			if(data > a[m-1] && data < a[m]) break ;//data介于中间值和中间值的上个值之间,结束查询
    			if(data < a[m])	ed = m ;//data小于当前中间值,更新最后的范围值					
    			else st = m ;	//data大于当前中间值。更新開始的范围值	
    			
    			if(++i > TabLong) //防止溢出
    				break ;
    		}
    	
    		if(st > ed ) return 0 ;	
    		return m ;
    }
    

  • 相关阅读:
    能够免费做商业站点的CMS讨论
    ntoskrnl.exe损坏或丢失的解决方式
    QT 仓库管理系统 开放源代码
    Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T
    DllImport中的EntryPoint
    IOS Table中Cell的重用reuse机制分析
    双slave的server_uuid同样问题
    怎样使用SetTimer MFC 够具体
    2013 成都邀请赛
    设计模式六大原则(2):里氏替换原则
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5083382.html
Copyright © 2011-2022 走看看