A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安若曦 中级黑马   /  2015-9-15 15:46  /  1000 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

折半查找:
  1. #include <stdio.h>

  2. /*
  3. *  使用折半查找来查找一个数
  4. *
  5. *  @param arr 数组
  6. *  @param len 数组长度
  7. *  @param key 要查找的数  20
  8. *
  9. *  @return 要查找的数的位置,如果查找不到返回值 -1
  10. */

  11. int searchItem(int arr[],int len, int key){

  12.   //先要定义变量
  13.     int low=0, high=len-1,mid;
  14.    
  15.     //循环
  16.    
  17.     while (low<=high) {
  18.         
  19.         
  20.     //计算mid 位置
  21.         mid =(low+high)/2;
  22.         
  23.     //判断  key和a[mid],右半区查找
  24.         if (key > arr[mid]) {
  25.             
  26.             
  27.     //key> arr[mid]      low= mid+1;
  28.             low= mid+1;
  29.         }else if (key < arr[mid]){
  30.             
  31.          //key< arr[mid];     high= mid-1;
  32.             high= mid-1;
  33.         
  34.         }else{
  35.         
  36.             //key == arr[mid];     //return  mid;
  37.             return  mid;
  38.    }
  39.    
  40. }
  41. //查找不到的情况
  42.     return -1;
  43.    
  44. }


  45. int main(int argc, const char * argv[]) {
  46.    
  47.     //定义一个数组
  48.    
  49.     int a[]={3,4,12,20,21,23,28,45,67,100};
  50.    
  51.     //查找的 key=20
  52.    
  53.     int loc = searchItem(a, 10, 20);
  54.    
  55.     printf("loc = %d\n",loc); // loc = 3;
  56.    
  57.    
  58.     return 0;
  59. }
复制代码



7 个回复

倒序浏览
赞一个 很详细
回复 使用道具 举报
2分法,这一思想很值得品味
回复 使用道具 举报
赞赞赞.......
回复 使用道具 举报
这个应该不算很难把!我觉得如果你能把一些容易搞乱的东西来一个总结和记忆就好了!比如指针!什么时候是*输出内容什么时候是**输出的话!那就更棒了!
回复 使用道具 举报
基础视频里有,是个好题,值得仔细研究
回复 使用道具 举报
尾尾 中级黑马 2015-9-19 18:54:52
7#
查找方法还是蛮重要的
回复 使用道具 举报
D_Time 中级黑马 2015-9-19 22:52:46
8#
不够详细啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马