程序员成长之旅——二分查找时间与空间复杂度

程序员成长之旅——二分查找时间与空间复杂度

时间复杂度

非递归
int binary_search(int* list, int len, int target)
{
 int left = 0;
 int right = len - 1;
 int middle;
 while (left < right) 
 {
  	middle = (left + right) / 2;
  	if (list[middle] = target)
  	{
   		printf("已找到该值,数组下标为:%d\n", middle);
   		return list[middle];
  	}
  	else if (list[middle] > target)
  	{
   		right = middle;
  	}
  	else if (list[middle] < target)
  	{
   		left = middle + 1;
  	}
 }
 	printf("未找到该值!");
 	return -1;
}
递归
while (left <= right) 
 {
  	if (left > right)//查找不到
   		return -1;
  	int mid = left + (right-left) / 2;
  	if (target == list[mid])//查找到
   		return mid;
  	else if (target < list[mid])
   		return binary_search(list, left, mid, target);
  	else
  		return binary_search(list, mid + 1, right, target);
 }

第一次有 n 个元素,第二次n/2个元素,以此类推第k次则为n/2^k个元素。
而时间复杂度一般都是取最坏结果的,并且是以k来作为衡量时间复杂度,
最坏结果,最后一次再剩一个元素,即n/2^k=1,得k=log2n,所以时间复杂
度为 O(logn)。

空间复杂度

递归

递归的深度*每次递归所需的辅助空间的个数
所以空间复杂度是:O(N) ( 递归一次要开辟一个空间)

非递归

由于辅助空间是常数级别的
所以:空间复杂度是O(1);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零出发——

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值