算法的复杂度

本文探讨了算法分析中的核心概念——时间复杂度和空间复杂度。通过大O的渐进表示法,阐述了时间复杂度如何衡量算法运行速度,以二分查找为例说明其时间复杂度为O(logN)。同时,介绍了空间复杂度如何度量算法运行时的存储需求,并通过斐波那契数列等例子进行对比。最后,提供了两个力扣(LeetCode)的面试题,分别是寻找数组中缺失的数字和数组的轮转问题,分析了不同解法的时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

1.时间复杂度

       时间复杂度主要衡量一个算法的运行快慢。

        大O的渐进表示法

实例1:

// 计算BubbleSort的时间复杂度?
void BubbleSort(int* a, int n)
{
	assert(a);
	for (size_t end = n; end > 0; --end)
	{
		int exchange = 0;
		for (size_t i = 1; i < end; ++i)
		{
			if (a[i - 1] > a[i])
			{
				Swap(&a[i - 1], &a[i]);
				exchange = 1;
			}
		}
		if (exchange == 0)
			break;
	}
}

准确的情况:n-1+n-2+n-3+.....+1=(n-1+1)*(n-1)/2

近似O(N^2);

实例2:

// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{
	assert(a);
	int begin = 0;
	int end = n - 1;
	// [begin, end]:begin和end是左闭右闭区间,因此有=号
	while (begin <= end)
	{
		int mid = begin + ((end - begin) >> 1);
		if (a[mid] < x)
			begin = mid 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值