zoukankan      html  css  js  c++  java
  • 二分查找

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

    算法过程:

    将欲查找元素与数组中间值(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为查找次数

  • 相关阅读:
    分享一下我珍藏的各种资料。
    JEditorPane中html文档中文乱码解决
    ubuntu恢复rm -rf误删文件
    MBR与分区表备份与恢复
    ubuntu tab命令补全失效
    selinux理解1-selinux介绍
    Mac-Xcode统计整个项目代码行数
    Mac清理空间-Xcode-删除相关文件
    # iOS开发
    Charles问题总结-最新版4.5.6
  • 原文地址:https://www.cnblogs.com/tan-wm/p/8985886.html
Copyright © 2011-2022 走看看