• 二分查找


    二分查找:查找已排序数组中的某个值

    算法过程:

    将欲查找元素与数组中间值(a[mid])对比,每次查找的数组大小减半。如果欲查找的值存在于数组中,则必定在某次循环中通过a[mid]返回

     1 #include <stdio.h>
     2 
     3 int main(void){
     4   int i = 0, mid, key, len;
     5   puts("enter the length of string:");
     6   scanf("%d", &len);//这里之后原来有一句getchar();为了执行错误1的语句,消除scanf后留下的换行符 
     7 
     8   int a[len];
     9   int lo = 0, hi = len - 1;
    10   mid = (lo + hi)/2;
    11   puts("enter a string of sorted number:");
    12   while(i<len) //错误1:这里原来是用while((a[i] = getchar())!='
    ')i++;注意a是一个整形数组!getchar检索的是字符型! 
    13     scanf("%d", &a[i++]);
    14 
    15   puts("enter a key:");
    16   scanf("%d", &key);
    17   while(lo<=hi){
    18     if(key<a[mid]){
    19     hi = mid - 1;
    20     mid =(lo + hi)/2;    
    21     }
    22     else if(key>a[mid]){
    23       lo = mid + 1;
    24       mid = (lo + hi)/2;    
    25     }
    26     else{
    27       printf("the key %d in string a is a[%d]
    ", key, mid);
    28       break;
    29     }    
    30   } 
    31   if(lo>hi)
    32   puts("key is not found.
    ");
    33   return 0;
    35 }

    查找的次数最多可能为:log2(N)次(N为数组大小),因为查找次数最多时最后一次查找为2个数中的一个,每次查找都排除掉一半的数,2^x = N,x为查找次数

  • 相关阅读:
    内网穿透教程
    深入浅出 TCP/IP 协议栈
    STM32CUBEMX配置RTC闹钟
    RT-Thread STM32 系列 BSP 制作教程
    RT-Thread 在stm小内存系列产品的nano+msh完整移植教程
    C语言字符串与数字相互转换
    SD卡 TF卡 接口引脚定义
    定位数据格式
    安信可ESP-12F连接阿里云教程
    电脑使用网络调试助手连接阿里云步骤
  • 原文地址:https://www.cnblogs.com/tan-wm/p/8985886.html
Copyright © 2020-2023  润新知