博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法实现----二分查找go语言实现
阅读量:2177 次
发布时间:2019-05-01

本文共 904 字,大约阅读时间需要 3 分钟。

二分查找

二分查找:时间复杂度O(log n),有序的情况下

go语言实现:

func erFen(nums []int, key, n int) int {	var low, high, mid = 0, n, 0	for {		mid = (high + low) / 2		if key < nums[mid] {			high = mid - 1		} else if key > nums[mid] {			low = mid + 1		} else {			return nums[mid]		}		if high < low {			return -1		}	}	return -1}

一个特殊的时间复杂度:O(n! ),旅行商问题,去不同距离的的n个地方选最短路径

递归

递归和循环:二者在比较起来递归并没有性能优势,只是相对于循环的代码更加清晰,在实际使用中循环的性能要好于递归

递归函数的两部分:基线条件和递归条件

//计算n个数累加func diGui(a int) int {	if a <= 0 {				//基线条件		return 0	}	return a + diGui(a-1)		//递归条件}

调用栈:计算机在内部使用被称为调用栈的栈

分而治之

步骤:

  1. 找出基线条件
  2. 不断将问题分解,直到符合基线条件
    二分查找递归版:
func erFenD(nums []int, key, low, high int) int {	if low <= high {								//基线条件		mid := (low + high) / 2		if nums[mid] == key {				//基线条件			return mid 		} else if key > nums[mid] {				//递归条件			return erFenD(nums, key, mid+1, high)		} else if key < nums[mid] {				//递归条件			return erFenD(nums, key, low, mid-1)		}	}	return -1}

转载地址:http://fcfkb.baihongyu.com/

你可能感兴趣的文章
BlockQueue 生产消费 不需要判断阻塞唤醒条件
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>