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;
    }
    

      

  • 相关阅读:
    《Java多线程编程核心技术》——多线程与同步
    《垃圾回收的算法与实现》——Python垃圾回收
    命令提示符
    clip
    explorer
    dotnet 命令启动报错
    Superfetch/SysMain
    Windows
    Windows 系统授权服务信息
    Windows 命令
  • 原文地址:https://www.cnblogs.com/li-peng/p/3300894.html
Copyright © 2011-2022 走看看