• 我的二分查找法(递归)


    //经典的二分查找法写法
    template <typename T>
    int binary_search(T *array, int n, T value)
    {
    	if(array == NULL) //判断array是否为空指针
    	{
    		cout << "input array is NULL." << endl;
    		return -1;
    	}
    	int left = 0, right = n-1;
    	while(left <= right)
    	{
    		int middle = left + ((right - left)>>1);	//用右移操作代替除2,提高效率
    		if(array[middle] > value)
    		{
    			right = middle - 1;
    		}
    		else if(array[middle] < value)
    		{
    			left = middle + 1;
    		}
    		else
    			return middle;
    	}
    	return -1;
    }
    
    
    //我写的二分查找法,测试过也没有错误,递归的效率可能低了些
    template <typename T>
    int binarySearch(T *array,int left, int right, T num)
    {
    	assert(array != NULL);
    	int mid = left + (right - left)/2;
    	if(num == array[mid])
    		return mid;
    	else if(num < array[mid])
    		right = mid - 1;
    	else
    		left = mid + 1;
    	if(left > right)
    		return -1;
    	return binarySearch(array, left, right, num);
    }
    
    int main()
    {
    	int a[]={4,4,5,6,7,7,9,42};  
    
    	cout<<binarySearch(a,0,sizeof(a)/sizeof(int),9)<<endl;  
    	system("pause");
    	return 0;
    }

  • 相关阅读:
    设计模式之策略模式、观察者模式浅析
    axis2_1.6.2之构建web端和客户端
    EJB3之查询
    qpid之简单实例
    ant1.9.4之编译、打包、发布、清理
    四数之和
    电话号码的字母的组合
    最接近的三数之和
    三数之和
    最长公共前缀
  • 原文地址:https://www.cnblogs.com/cnsec/p/3789806.html
Copyright © 2020-2023  润新知