zoukankan      html  css  js  c++  java
  • c++实现二分查找

    简要描述:


    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除

    困难。

    条件:查找的数组必须要为有序数组。

    二分查找的过程剩简要描述如下图:



    二种实现方式


    1.递归

    /*
    arrat:数组 , low:上界;  high:下界;  target:查找的数据; 返回target所在数组的下标 
    */
    int binarySearch(int array[], int low, int high, int target) {
    	int middle = (low + high)/2;
    	if(low > high) {
    		return -1;
    	}
    	if(target == array[middle]) {
    		return middle;
    	}
    	if(target < array[middle]) {
    		return binarySearch(array, low, middle-1, target);
    	}
    	if(target > array[middle]) {
    		return binarySearch(array, middle+1, high, target);
    	} 
    }
    


    2.非递归(循环)

    /*
    arrat:数组 , n:数组的大小;  target:查找的数据; 返回target所在数组的下标 
    */
    int binarySearch2(int array[], int n, int target) {
    	int low = 0, high = n, middle = 0;
    	while(low < high) {
    		middle = (low + high)/2;
    		if(target == array[middle]) {
    			return middle;
    		} else if(target < array[middle]) {
    			high = middle;
    		} else if(target > array[middle]) {
    			low = middle + 1;
    		}
    	}
    	return -1;
    }

    推荐使用非递归的方式,因为递归每次调用递归时有用堆栈保存函数数据和结果。能用循环的尽量不用递归。

  • 相关阅读:
    caffe中的sgd,与激活函数(activation function)
    image retrieval数据集
    八卦
    caffe的损失函数
    caffe的输入
    rcnn spp_net hcp
    js实现幻灯片播放图片示例代码
    Checbox的操作含已选、未选及判断代码
    shell中case的用法学习笔记
    linux bash shell中case语句的实例
  • 原文地址:https://www.cnblogs.com/riasky/p/3429177.html
Copyright © 2011-2022 走看看