二分法

算法

二分法

用途

查找数据

适用情况

一批有序数据

基本思路

基本思想:选定这批数中居中间位置的一个数与所查数比较,看是否为所找之数,若不是,利用数据的有序性,可以决定所找的数是在选定数之前还是在之后,从而很快可以将查找范围缩小一半。以同样的方法在选定的区域中进行查找,每次都会将查找范围缩小一半,从而较快地找到目的数。

实现程序

#include "stdio.h"
#define M 10
int main()
{
   int a[10]={11,20,67,86,99,100,654,878,989,4563};
   int found ,low,high,mid,i,b;
   printf("请输入要查找的数字");
   scanf("%d",&b);
   low 0;
   high M-1;
   found 0;
   mid 5;
   for(i=0;i<M;i++)
  {
       if(b==a[mid] )
      {
           printf("已找到数据:%d",mid);
           goto C;
      }
       else
      {
           mid = (low+high)/2;
           if(a[mid]<b)
          {
               low mid+1;

          }
           else
          { 
               high mid-1;
          }
      }
  }
   printf("没有发现该数!");
  C: ; 

}
/*******************************************
* while(low<high)
* {
*     mid=(mid+high)/2;
*     if(b==a[mid])
       * {
       *   found = 1; 
       *   break;
       * }
       * eles if(b>a[mid])
       * {
       *   low=mid+1;
       * }
       * else
       * {
       *   high = mid-1;
       * }
* }
* *****************************************/

补充

非法输入问题

每个函数都有一个返回值

scanf的返回值为:

成功录入 返回1

未被成功录入 返回0

 

 

 

 

posted @ 2021-10-29 10:08  eliotJones  阅读(137)  评论(0)    收藏  举报