http://news.csdn.net/a/20100423/218099.html看到这个。。。说只有10%的程序员写出二分查找算法,我自己也去试了一下,果然是费了很长时间,结果看了文章下面的参考才写出没bug的。。。
二分查找:二分查找也称为折半查找要求线性表中的结点必须己按关键字值的递增或递减顺序排列。它首先用要查找的关键字k与中间位置的结点的关键字相比较,这个中间结点把线性表分成了两个子表,若比较结果相等则查找完成;若不相等,再根据k与该中间结点关键字的比较大小确定下一步查找哪个子表,这样递归进行下去,直到找到满足条件的结点或者该线性表中没有这样的结点。代码如下:2011-02-14UNIX环境
#include <stdio.h> #include <stdlib.h> int BinarySearch(int a[],int value,int len) { int middle,low,high; low = 0; high = len -1; while(low <= high) { middle = (low+high)/2; if(value > a[middle]) { low = middle + 1; } else if (value < a[middle]) { high = middle -1; } else return middle; } return -1; } int main(int argc, char *argv[]) { int len,result; int a[] = {0,1,2,3,4,5,6,7,8,9}; len = sizeof(a)/sizeof(int); int value; printf("输入要查找的值:"); scanf("%d",&value); result = BinarySearch(a, value, len); if(result == -1) { printf("i can't find it/n"); } else printf("it's at %d/n",result); }