C语言经典算法之二分查找详解

简介: C语言经典算法之二分查找详解

目录

1 . 算法思想:
2 . 查找步骤:
3 . 图解
4 . 代码演示:
1 . 算法思想:
二分查找又称折半查找,适合对已经排好序的数据集合进行查找,时间复杂度为O(log2n),效率高。对一升序的数据集合,先找出升序数据集合最中间的元素,将数据划分为两个子集,将最中间的元素和关键字进行比较,如果相等则返回,如果大于关键字,则在前一个数据子集中查找,如果想小于反之,直至找到为止

2 . 查找步骤:
(1) 首先确定查找区间的中间位置(假定是一个升序的数组),那么mid = left + ( right - left ) / 2 ;
//为了防止越界
(2) 用待查找值与中间位置值进行比较,若相等,则找到,输出
(3) 若大于,则在后半区域中继续进行折半查找
(4) 若小于,则在前半区域中继续进行折半查找
(5) 查找成功,则返回数值的数组下标

3 . 图解
假设查找数组int arr[] = {1,2,3,4,5,6,7,8,9,10}中的数值7

分析:一共经历三次查找,四处left=right时查找结束。第一次mid=4,5小于7,则left=mid+1=5,继续在右侧折半查找,第二次mid=7,8大于7,则right=mid-1=6,第三次mid=5,6小于7,left=mid+1=6,此时left=right,找到7,下标为6

4 . 代码演示:
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;

while (left<=right)
{
    //int mid = (left + right) / 2;
    int mid = left + (right - left) / 2;//防止数据过大,越界

    if (arr[mid] < k)
    {
        left = mid + 1;
    }
    else if (arr[mid] > k)
    {
        right = mid - 1;
    }
    else
    {
        printf("找到了,下标是:%d\n", mid);
        break;
    }
}
if (left > right)
    printf("找不到\n");

return 0;

}

运行结果:
image.png

相关文章
|
12天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
23 1
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
110 1
|
11天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
12天前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
33 2
|
12天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
30 1
|
12天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
37 1
|
1月前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
C语言算法复杂度
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法