分享

C语言二分查找(折半查找)算法及代码

 我不是伟人L 2016-12-08
二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在,具体的使用方法可通过下面的代码具体了解。
  1. #include
  2.  
  3. binarySearch(int a[], int n, int key){
  4. int low = 0;
  5. int high = n - 1;
  6. while(low<> high){
  7. int mid = (low + high)/2;
  8. int midVal = a[mid];
  9. if(midValkey)
  10. low = mid + 1;
  11. else if(midVal>key)
  12. high = mid - 1;
  13. else
  14. return mid;
  15. }
  16. return -1;
  17. }
  18.  
  19. int main(){
  20. int i, val, ret;
  21. int a[8]={-32, 12, 16, 24, 36, 45, 59, 98};
  22. for(i=0; i8; i++)
  23. printf('%d\t', a[i]);
  24.  
  25. printf('\n请输人所要查找的元素:');
  26. scanf('%d',&val);
  27.  
  28. ret = binarySearch(a,8,val);
  29.  
  30. if(-1 == ret)
  31. printf('查找失败 \n');
  32. else
  33. printf ('查找成功 \n');
  34.  
  35. return 0;
  36. }
#include binarySearch(int a[], int n, int key){ int low = 0; int high = n - 1; while(low<= high){="" int="" mid="(low" +="" high)/2;="" int="" midval="a[mid];">key) high = mid - 1; else return mid; } return -1;}int main(){ int i, val, ret; int a[8]={-32, 12, 16, 24, 36, 45, 59, 98}; for(i=0; i<8; i++)="" printf('%d\t',="" a[i]);="" printf('\n请输人所要查找的元素:');="" scanf('%d',&val);="" ret="binarySearch(a,8,val);" if(-1="=" ret)="" printf('查找失败="" \n');="" else="" printf="" ('查找成功="" \n');="" return="">
运行结果:
-32 12 16 24 36 45 59 98请输入所要查找的元素:12查找成功
在上面的代码中,我们成功地通过二分査找算法实现了查找功能,其实现过程如下图所示。


二分査找算法的査找过程

在如上图所示的查找过程中,先将序列中间位置的元素与所要査找的元素进行比较,发现要査找的元素位干该位置的左部分序列中。接下来将mid的左边一个元素作为 high,继续进行二分査找,这时mid所对应的中间元素刚好是所要査找的元素,査找结束,返回査找元素所对应的下标。在main函数中通过返回值来判断査找是否成功,如果査找成功.就打印输出“査找成功”的信息,否则输出“査找失畋”的信息。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多