二分查找的时间复杂度。
int BinaryFindValue(const int* nums, int n, int val)
{
assert(nums != NULL);
int pos = -1;
int left = 0, right = n - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (val < nums[mid])
{
right = mid - 1;
}
else if (val > nums[mid])
{
left = mid + 1;
}
else
{
pos = mid;
break;
}
return pos;
}
}
int main()
{
int nums[] = { 12,23,34,45,56,67,78,90 };
int n = sizeof(nums) / sizeof(nums[0]);
int val = 34;
int pos = BinaryFindValue(nums, n, val);
printf("%d\n", pos);
}
n/2 n/4 n/8 ......n/(2m) 2*m=n m=log2*n
递归算法时间复杂度
int Fun(int n)
{
if (n <= 1)return n;
else return Fun(n - 1) + 1;
}
int main()
{
int sum = Fun(1000000);
return 0;
}
栈的大小是有限的,这个函数的时间复杂度是O(n)