折半查找法适合于1采用顺序存储结构的2必须按照关键字大小排序的序列查找
如代码所示:
1 #include2 3 int BinSearch(int a[], int length, int k) 4 { 5 int low = 0, high = length - 1; 6 int mid; 7 while(low <= high) 8 { 9 mid = (low + high) / 2;10 if(a[mid] == k)11 return mid;12 else if(a[mid] > k)13 high = mid - 114 else15 low = mid + 1;16 }17 return 0;18 }19 20 int main()21 {22 int a[8] = { 2, 3, 4, 5, 6, 7, 8, 10};23 printf("元素5的位置在 :%d\n", BinSearch(a, 8, 5));24 }
折半查找法的基本思路是设置low,high, mid三个变量。如代码所示,就是通过不断的改变这3个变量来查找是否存在查找值K,如存在返回它所在的位置,如不存在,返回0
折半查找法的优点是比较次数比顺序查找少,但缺点是必须是要对已排序号的序列查找。
一般的在考试中,不要考折半查找法的代码。只会考折折半查找法的查找成功时的平均查找长度或者查找不成功时候的平均查找长度。
其中具体的做法是 画一个完全二叉排序树,数每一层有几个元素,各自乘以层数,求和。再除以元素个数。得到查找成功的平均查找长度。
查找不成功的平均查找长度就是 用虚线 把空出来的 位置补齐(最后一层的需要再一层)。然后对虚线求查找长度就行。