图像处理算法之二分查找

描述

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

search.h

#ifndef _SEARCH_H_
#define _SEARCH_H_
void Search(int *a,int num,int n);
#endif

search.c

#include
#include "search.h"
/**************************************
 函数的名:search
 函数的功能:二分查找
 函数的参数:空
 作者:
 日期:
******************************************/
void Search(int *a,int num,int n)
{
   int left = 0;    
   int right = n-1;
   int mid = (left+right)/2;
   while(a[mid] != num&&left    {
       if(a[mid] >num)
       {
           right = mid -1;
       }
       else if(a[mid] < num)
       {
           left = mid +1;
       }
       mid = (left+right)/2;
   }
   if(a[mid] == num)
   {
       printf("查找的结果中:这个值为:%d ",num);
   }
   else
   {
       printf("查找没有这个值 ");
   }
}

main.c

#include
#include "search.h"
int main ()
{
   int a[] = {30,44,66,22,48,89,100,20,1,3,6,88};
   int n = sizeof(a)/sizeof(int);
   int i,j;
   for(i = 0;i    {
       for(j = 0;j        {
           if(a[j]>a[j+1])
           {
               int tmp = a[j];
               a[j] = a[j+1];
               a[j+1] = tmp;
           }
       }
   }
         for(i = 0;i                   {
                           printf(" %d",a[i]);
                  }
                  printf(" ");
                  int num;
                  while(1)
                  {
                           printf("请输入你要查找的数据: ");
                           scanf("%d",&num);
                           Search(a,num,n);
                  }
   return 0;
}


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分