二分法在有序数组中查找一个数

本文介绍了如何在有序数组中使用二分法查找特定数值。通过比较中间元素与目标值,不断缩小查找范围,直到找到目标或者范围为空。二分查找算法在处理大数组时效率高,其时间复杂度为O(log N)。文章提供了两种不同的实现方法。
摘要由CSDN通过智能技术生成

算法思想:
首先条件为有序数组,先查找中间下标的元素:
(1)如果该元素等于7,则返回中间下标,查找结束;
(2)如果该元素大于7,则7必然在中间元素的右边部分,则缩小范围,在右半部分查找7,再计算右半部分的中间下标,转到(1)
(3)如果该元素下于7,则7必然在中间元素的左半部分,则缩小范围,在左半部分查找7,再计算左半部分的中间下标,转到(1)

优点:
对于已排好序的大数组起到效率很高地查询作用。

时间复杂度:
查找数据长度为N,每次查找后减半,
第1次 N/2 … 第k次 N/2^k,最坏的情况下第k次才找到,此时只剩一个数据,长度为1。
即 N/2^k = 1,查找次数 k=log2(N)。
时间复杂度为:log N

时间复杂度大小排序:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

法一:

#include<stdio.h>
#define N 9

/*
int main()
{
        static int a[N] = {1,2,3,4,5,6,7,8,9}; //程序在编译运行的时候,普通变>量存放在栈区,static
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值