抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

二分查找算法

只能对有序排列数据进行高效查找。

方法

定义下标:头l,尾r,中位数mid。

中位数对应元素与参数对比大小,若参数小于mid,则在左侧,将mid-1赋值给r,重定位r下标。

依次执行最终找到数据。

image-20221113144340529

代码实现二分查找

namespace AlgorithmTest13_二分查找
{
class TestSearch
{
public static int BinarySearch(int[] arr, int target)
{
int l = 0;
int r = arr.Length - 1;
//int mit = (r + 1 )/ 2;中位数
int mit = l + (r - l) / 2;//中位数
while (l <= r)
{
//如果输入值小于中位数
if (target < arr[mit])
{
r = mit - 1;
}
else if (target > arr[mit])
{
l = mit + 1;
}
else
{
return mit;
}
}
return -1;
}
}
}

时间复杂度分析

顺序查找法:最坏的时间复杂度。也就是对于未命中查找的情况,需要遍历所有的元素。

二分查找法:最坏的时间复杂度。也就是对于未命中查找的情况。每次比较都将数据规模缩小一半。

最坏情况(未命中查找)

对于15个元素使用顺序查找最多进行了15次比较

对于15个元素使用二分查找最多进行了4次比较
log2^15 = 4

对于n个元素使用二分查找最多进行了log2 n次比较

因此顺序查找复杂度:O(n),二分查找复杂度:O(log n)

O(1) < O(log n) < O(n)

评论