zoukankan      html  css  js  c++  java
  • 二分查找(循环/递归)实现

    1.Java实现

    • 循环式
    public static int binarySearch(int[] array, int key) {
    	int low = 0, high = array.length - 1;
    	while (low <= high) {
    		int mid = (low + high) / 2;
    		if (array[mid] > key) {
    			high = mid - 1;
    		} else if (array[mid] < key) {
    			low = mid + 1;
    		} else {
    			return mid;
    		}
    	}
    	return -1;
    }
    
    
    • 递归式
    public static int binarySearch(int[] array, int key, int low, int high) {
    	int mid = (low + high) / 2;
    	if (array[mid] > key) {
    		high = mid - 1;
    		if (low > high) {
    				return -1;
    		}
    		return binarySearch(array, key, low, high);
    	} else if (array[mid] < key) {
    		low = mid + 1;
    		if (low > high) {
    				return -1;
    		}
    		return binarySearch(array, key, low, high);
    	} else {
    		return mid;
    	}
    }
    

    2.Golang实现

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := []int{1, 3, 4, 5, 6}
    	key := 7
    	i := BinarySearch(a, 0, len(a)-1, key)
    	fmt.Println(key, "is:", "array[", i, "]")
    }
    
    /*
    return -1 : not find & illeage bounds
    return index : find key
    */
    func BinarySearch(a []int, left int, rigth int, key int) int {
    	if left > rigth {
    		return -1
    	}
    	mid := (left + rigth) / 2
    	if a[mid] > key {
    		return BinarySearch(a, left, mid-1, key)
    	}
    	if a[mid] < key {
    		return BinarySearch(a, mid+1, rigth, key)
    	}
    	return mid
    }
    
  • 相关阅读:
    Map集合的四种遍历方式
    测试框架:使用SONAR分析代码质量
    什么是蓝绿发布
    linux命令(mac)
    TestNG.xml大全
    Mac端git新增项目
    JavascriptExecutor的UI自动化实战
    git命令及Maven命令
    UI自动化常用代码
    USACO 1.3 Ski Course Design
  • 原文地址:https://www.cnblogs.com/jiy-for-you/p/7281966.html
Copyright © 2011-2022 走看看