首页 > 代码库 > 折半查找
折半查找
首先,这个算法的确很简单,但是写了很多次还是自己不能完全的写对.上码分析:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define LENGTH 4 // 数组的长度 6 #define MAX 10 // 随机数的最大值 7 8 /** 折半查找的例子 9 * 先随机生成一个数组然后进行从小到大排序,然后折半查找输入的数10 * @date 2014-07-2611 */12 13 void bubblesort(int *data)14 {15 int i,j,t;16 for(i = 0; i < LENGTH; i++)17 {18 for(j = 0; j < LENGTH -1 - i; j++)19 {20 if(data[j] > data[j+1])21 {22 t = data[j];23 data[j] = data[j+1];24 data[j+1] = t;25 }26 }27 }28 }29 int binSearch(int *data,int n,int num)30 {31 int index,start = 0,end = n-1;32 33 while(start <= end)34 {35 index = (start + end)/2;36 if(data[index] < num) // 要找的数在右边37 start= index+1;38 else if(data[index] > num) // 要找的数在左边39 end = index-1;40 else41 return index;42 }43 return -1;44 }45 int main()46 {47 int i,*data =http://www.mamicode.com/ NULL,num,result;48 data = http://www.mamicode.com/malloc(sizeof(int)*LENGTH);49 50 srand((int)time(0));51 for(i = 0; i < LENGTH ; i++)52 data[i] = 1+ (int)(MAX*rand()/(RAND_MAX+1.0));53 54 bubblesort(data);55 56 printf("\n请输入(<%d)",MAX);57 scanf("%d",&num);58 59 result = binSearch(data,LENGTH,num);60 61 if(result > -1)62 printf("%d",result);63 else64 printf("NO such number in the array!");65 return 0;66 }
分析: 一直都知道核心那部分,判断数大往右查,数小往左查.
困惑点: 开始一直不知道循环结束的条件.
这次我最开始就写错了,当找到数的时候我只是 i = index,然后循环就退不出来了.
如果此例中是 start < end 也不对,当数组长度是4的时候,要是查找第一个数的话是查不到的,所以必须带等号.
折半查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。