二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

简介: 二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

二分查找的概念

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

实现原理

  1. 首先,假设表中元素是按升序排列,将表中的位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表
  3. 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  4. 重复以上过程,直到找到满足条件的记录,使查找成功。或直到子表不存在为止,此时查找不成功

图解

算法效率

时间复杂度为 O(log2n)  也就是说查找的最大次数为log2n

优点:查找效率高

缺点:必须采用顺序存储结构,,必须按关键字大小有序排列。

使用C语言代码实现

//二分查找
//给定一个有序数组,任意给定一个值,查找该值在数组的位置
int main()
{
  int arr[] = { 5,9,12,15,20,32,36,42,56,78,89 };
  int key = 36;  //要查找的值
  int sz = sizeof(arr) / sizeof(arr[0]);
  int left = 0;
  int right = sz - 1;
  int flag = 0;//标志位
  while (left <= right)//当数组未查找完成时
  {
    int mid = (left + right) / 2;
    if (arr[mid] > key)
    {
      right = mid - 1;
    }
    else if (arr[mid] < key)
    {
      left = mid + 1;
    }
    else
    {
      printf("arr[%d]=%d\n", mid, key);
      flag = 1;
      break;//如果没有break,代码会陷入死循环
    }
 
  }
  if (!flag)
  {
    printf("can't find!!\n");
  }
  return 0;
}

 

相关文章
|
1天前
|
存储 编译器 C语言
C语言数组详解
C语言数组详解
9 1
|
1天前
|
算法 Java 机器人
Java数据结构与算法:查找算法之二分查找
Java数据结构与算法:查找算法之二分查找
|
2天前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
2天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
2天前
|
存储 自然语言处理 编译器
|
1天前
|
存储 算法 安全
深入解析RSA算法原理及其安全性机制
深入解析RSA算法原理及其安全性机制
|
1天前
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
|
1天前
|
算法 安全 Java
AES加解密算法:原理、应用与安全性解析
AES加解密算法:原理、应用与安全性解析
|
1天前
|
存储 C语言
C语言中的多级指针、指针数组与数组指针
C语言中的多级指针、指针数组与数组指针
5 0
|
1天前
|
存储 C语言
C语言数组指针详解与应用
C语言数组指针详解与应用
8 0