折半查找法的温习
Posted 李家大少爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半查找法的温习相关的知识,希望对你有一定的参考价值。
折半查找法适合于1采用顺序存储结构的2必须按照关键字大小排序的序列查找
如代码所示:
1 #include <stdio.h> 2 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 - 1 14 else 15 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
折半查找法的优点是比较次数比顺序查找少,但缺点是必须是要对已排序号的序列查找。
一般的在考试中,不要考折半查找法的代码。只会考折折半查找法的查找成功时的平均查找长度或者查找不成功时候的平均查找长度。
其中具体的做法是 画一个完全二叉排序树,数每一层有几个元素,各自乘以层数,求和。再除以元素个数。得到查找成功的平均查找长度。
查找不成功的平均查找长度就是 用虚线 把空出来的 位置补齐(最后一层的需要再一层)。然后对虚线求查找长度就行。
以上是关于折半查找法的温习的主要内容,如果未能解决你的问题,请参考以下文章