用C语言实现有序数组的二分查找

简介: 笔记

原理. 二分查找又称折半查找,只适用于有序数组。. 二分查找原理很简单,针对有序数组的查找效率也很高。. 具体原理为,每次拿目标数值k表示)与数组中间位置的数据(以下用a [mid]表示,mid表示数组中间位置索引值)进行比较,如果k大于a [mid],继续将k与大于a [mid]部分的中间位置的值进行比较;如果k小于a [mid],继续将k与小于a [mid]部分的中间位置值进行比较。. 注:对于无序数组,若先进行排序,再使用二分查找,这种方法虽然可以实现查找,但是会改变最原始数组的元素位置,所以针对无序数组,最好用基本的查找算法实现30.png

#include<stdio.h>
int main()
{
  int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
  int left = a[0];
  int sz = sizeof(a) / sizeof(a[0]);      //计算数组大小
  int right = a[sz - 1];    //使右值等于最后一个数字
  int k = 12;           //要查找的数是12
  int mid;
  while (left<=right)       //当左值小于=右值的时候进入循环,左值大于右值退出循环
  {
     mid = (right + left) / 2;// 中间值等于左值加右值再除2
    if (k < mid)
    {
      right = mid-1;           //如果要找的数字小于mid,使右值等于mid-1
    }
    else if (k > mid)
    {
      left = mid + 1;      //如果要找的数字大于mid,使左值等于mid+1
    }
    else
    {
      printf("找到了,下标是:%d", mid - 1);    //如果要找的数字等于mid则找到了
      break;
    }
  }
  if (left > right)      //当左值大于右值时,就说明找不到
    printf("找不到");
  return 0;
}
相关文章
|
6月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
6月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
6月前
|
C语言
C语言----数组----二分查找
C语言----数组----二分查找
|
6月前
|
C语言
C语言--通过函数实现二分查找
C语言--通过函数实现二分查找
|
7月前
|
C语言 数据安全/隐私保护
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
51 0
|
7月前
|
存储 搜索推荐 C语言
Leetcode—合并两个有序数组—C语言
Leetcode—合并两个有序数组—C语言
|
7月前
|
算法 C语言
【C语言】二分查找
【C语言】二分查找
|
7月前
|
C语言
C语言——二分查找(在万千之中快速找到你)
C语言——二分查找(在万千之中快速找到你)
46 0
|
7月前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现