• 精典算法之二分查找法


    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

     二分查找法是已经排好顺序的集合,要从集合的中间开始查找,如果这个项小于我们要查找的数,则这个项前边的所有数都小于我们要查找的对象
     就无需再浪费时间去查在前边的数查找;如果搜寻的数天于我们要查找的对象那么这个数的后边的数都大于我们要查找的对象,则后边的数我们也不用再去查找了。

    下边我会用c#和c++两种语言给出代码

    c#二分查找代码

     static void Main(string[] args)
            {
                int[] _array={ 1,3,5,6,10,14,16,20,21,23,28};
                int _findValue = BinSearch(_array, 0, _array.Length, 3);
                if (_findValue == -1)
                {
                    Console.WriteLine("not find");
                }
                else
                {
                    Console.WriteLine("find the value at " + _findValue);
                }
                Console.ReadLine();
            }
    
            static int BinSearch(int[] _array, int start, int end, int key)
            {
                int left, right;
                int mid;
                left = start;
                right = end;
    
                while (left <= right)
                {
                    mid = (left + right) / 2;
    
                    if (key < _array[mid])
                    {
                        right = mid - 1;
                    }
                    else if (key > _array[mid])
                    {
                        left = mid + 1;
                    }
                    else
                        return mid;
                }
                return -1;
            }
    

      

    c++二分查找代码

    int BinSearch(const int* Array,int start,int end,int key)
    {
    	int left,right;
    	int mid;
    	left=start;
    	right=end;
    	
    	while(left<=right)
    	{
    		mid = (left + right)/2;
    
    		if(key < Array[mid])
    		{
    			right = mid - 1;
    		}
    		else if(key > Array[mid])
    		{
    			left = mid + 1;
    		}
    		else
    			return mid;
    	}
    	return -1;
    }
    
    int main(int argc,char* argv[])
    {
    	int _array[11] ={ 1,3,5,6,10,14,16,20,21,23,28};
    
    	int _findInt =BinSearch( _array,0,(sizeof _array)/(sizeof _array[0]),3);
    	if(_findInt == -1)
    	{
    		cout<<"not find"<<endl;
    	}
    	else
    	{
    		cout<<"find the Value at  "<<_findInt<<endl;
    	}
    	
    	 return 0;
    }
    

      

  • 相关阅读:
    搭建zabbix监控
    liunx 下ctrl+D问题解决方案
    linux配置双线策略
    Discuz! X2.5读写分离
    慢谈MYSQL常用SQL语句
    CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
    自动抓包shell脚本
    zabbix实施部署原理架构
    ftp搭建教程
    DNS搭建教程
  • 原文地址:https://www.cnblogs.com/li-peng/p/3300894.html
Copyright © 2020-2023  润新知