黑马程序员技术交流社区

标题: C语言:折半查找 [打印本页]

作者: 安若曦    时间: 2015-9-15 15:46
标题: C语言:折半查找
折半查找:
  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. }
复制代码




作者: malong0517    时间: 2015-9-18 19:48
赞一个 很详细
作者: f1gogo    时间: 2015-9-18 20:12
2分法,这一思想很值得品味
作者: huahaoL    时间: 2015-9-18 21:38
赞赞赞.......
作者: cenjuwei    时间: 2015-9-18 21:39
这个应该不算很难把!我觉得如果你能把一些容易搞乱的东西来一个总结和记忆就好了!比如指针!什么时候是*输出内容什么时候是**输出的话!那就更棒了!
作者: 荣荣    时间: 2015-9-18 22:13
基础视频里有,是个好题,值得仔细研究
作者: 尾尾    时间: 2015-9-19 18:54
查找方法还是蛮重要的
作者: D_Time    时间: 2015-9-19 22:52
不够详细啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2