zoukankan      html  css  js  c++  java
  • 精典算法之二分查找法

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

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

    下边我会用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;
    }
    

      

  • 相关阅读:
    tcp_wrapper
    iptables
    Openstack_后端存储平台Ceph
    Openstack_O版(otaka)部署_Horizon部署
    Openstack_O版(otaka)部署_网络服务Neutron部署
    Openstack_O版(otaka)部署_Nova部署
    Openstack_O版(otaka)部署_镜像服务glance部署
    Openstack_O版(otaka)部署_认证服务keystone部署
    Openstack_O版(otaka)部署_准备环境和依赖软件
    模块
  • 原文地址:https://www.cnblogs.com/li-peng/p/3300894.html
Copyright © 2011-2022 走看看