C语言第八弹--二分查找

简介: C语言第八弹--二分查找

“二分查找”

思路:创建一个中间变量,每次让中间变量与需要查找的数字比较大小,如果中间变量大于查找的数字,那么查找数字肯定在左侧。反之,查找数字肯定在中间变量的右侧。以此循环不断寻找,直到找到或循环结束为止。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int k = 0;
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int left = 0;//设定左值
  int right = sz - 1;//设定右值
  printf("请输入您要查找的数字:");
  scanf("%d", &k);
  while (left <= right)//循环条件
  {
    int mid = left+ (right - left) / 2;//通过左右值求取中间值
    if (k > arr[mid])//如果k大于mid下标对应的值,那么左值变为mid+1
    {
      left = mid + 1;
    }
    else if (k< arr[mid])//如果k小于mid下标对应的值,那么右值变为mid-1
    {
      right = mid - 1;
    }
    if (k == arr[mid])
      {
        printf("找到了 下标为%d\n",mid);
        break;
      }
  }
  if(left>right)
  printf("数组中不存在该数!\n");
  return 0;
}

难点:当k大于mid下标对应值时,那么说明left这边的值全部是小于k的,那么left就会被赋值为mid+1。反之,right被赋值为mid-1继续循环,从而达到折半查找的效果。

注:二分查找只能用于有序数组,如果不是有序数组,就无法判定是否前面都小于k,可以在进行查找前,使用排序将数组变为有序,从而就可以使用二分查找,查找需要的k。

相关文章
|
7月前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
7月前
|
存储 算法 搜索推荐
C语言与人生:数组交换和二分查找
C语言与人生:数组交换和二分查找
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
6月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
6月前
|
C语言
C语言----数组----二分查找
C语言----数组----二分查找
|
6月前
|
C语言
C语言--通过函数实现二分查找
C语言--通过函数实现二分查找
|
7月前
|
C语言 数据安全/隐私保护
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
46 0
|
7月前
|
算法 C语言
【C语言】二分查找
【C语言】二分查找
|
7月前
|
C语言
C语言——二分查找(在万千之中快速找到你)
C语言——二分查找(在万千之中快速找到你)
44 0
|
7月前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现