【C语言】经典算法之二分查找

简介: 【C语言】经典算法之二分查找

1.算法思想😀


二分查找:


又称为折半查找,二分查找,适合对已经排序好的数据集合进行查找,时间复杂度0 (log2n) ,效率高。假设有-升序的数据集合,先找出升序集合中最中间的元素,将数据集合划分为两个子集,将最中间的元素和关键字key进行比较,,如果等 于key则返回,如果大于关键字key,则在前一个数据集合中查找,否则在后-个子集中查找,直到找到为止,如果没找到则返回-1;


2.算法步骤😀


(1)首先确定整个查找区间的中间位置mid=(left+high)/2;

      (2)  用待查关键字值与中间位置关键字值进行比较

若相等,则查找成功;

             若大于,则在后半个区域中继续进行折半查找。

             若小于,则在前半个区域中继续进行折半查找。

             查找成功,返回关键字所在数组下标,没找到返回-1;

图解


d55cadf65c3b4426a6a5717c55602161.png


3.代码😀

假设我们在数组int arr[] = {1,2,3,4,5,6,7,8,9,10}查找数值7

#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int k = 7;
  int left = 0;   //左下标
  int right = sizeof(arr) / sizeof(arr[0]);     //右下标
  while (left <= right)
  {
    int mid = (left + right) / 2;   //中间元素的下标
    if (arr[mid] < k)
    {
      left = mid + 1;
    }
    else if (arr[mid] > k)
    {
      right = mid - 1;
    }
    else
    {
      printf("找到%d的下标了:%d", k, mid);
      break;
    }
  }
}


目录
相关文章
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
103 1
|
28天前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
C语言算法复杂度
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
2月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
23 0
|
2月前
|
搜索推荐 C语言 C++
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
4月前
|
机器学习/深度学习 存储 并行计算
C语言与机器学习:K-近邻算法实现
C语言与机器学习:K-近邻算法实现
64 0
下一篇
无影云桌面