解析二分查找时间复杂度
程序员文章站
2024-03-20 09:49:52
...
话不多说,先来段二分查找的代码。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int BinSearch(int arr[], int sz, int key){//找到返回下标,找不到返回-1
int left = 0;
int right = sz - 1;
while (left <= right){
int mid = left + ((right - left) >> 1);
if (key < arr[mid]){
right = mid - 1;
}
else if (key>arr[mid])
{
left = mid +1;
}
else
return mid;
}
if (left > right)
return -1;
}
int main()
{
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int sz = (sizeof(arr) / sizeof(arr[0]));
int a = 1;
int ret=BinSearch(arr, sz, a);
printf("%d\n", ret);
getchar();
return 0;
}
首先,要求二分查找的时间复杂度就要知道什么是时间复杂度,时间复杂度其实就是一个函数,该函数计算的是执行基本能操作最坏的次数,在二分查找中,二分的次数就是基本语句的执行次数,我们不妨设次数为x,假设该数组的长度是n,一次二分后长度变为n/2,两次二分后长度变为n/4,........x次二分后长度变为n/(2)^x,假设最坏长度变为1才找到了key,此时可得(n/(2)^x)=1;可得x=log2n(log以2为底n的对数),而在数据结构中常常这样写lgn,所以o()=o(lgn);上一篇: uva 12412
推荐阅读
-
解析二分查找时间复杂度
-
用js写出二分查找(折半查找)算法和时间复杂度
-
数据结构二分法-给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。
-
Pythonic版二分查找实现过程原理解析
-
LeetCode704. 二分查找(JavaScript解析)
-
二分查找(binary search)java实现及时间复杂度
-
解析php二分法查找数组是否包含某一元素
-
01-复杂度3 二分查找
-
Java 二分查找的实现及图例解析
-
LeetCode解析------4.寻找两个正序数组的中位数-二分查找