读书人

数据结构之减半查找法(Binary Search)

发布时间: 2012-08-29 08:40:14 作者: rapoo

数据结构之折半查找法(Binary Search)
对于要查找的数据已经排序,此时仍然可以使用顺序查找法来进行查找,但是此时有更加简便的方法,
那就是“折半查找法(Binary Search)”。


折半查找法的实现步骤如下:
假设数组的上下范围分别为low和high,则此时中间元素是(low + hihg) / 2。在进行查找时。
1.如果查找关键码小于数组的中间元素,则关键码在数据数组的前半部。
2.如果查找关键码大于数组的中间元素,则关键码在数据数组的后半部。
3.如果查找关键码等于数组的中间元素,则中间元素就是查找的值。


对于如下的例子:
1, 2, 3, 4, 5, 6, 7, 8, 9


若要查找的整数是8,则
第一步是与中间的元素索引4的值5进行比较。因为8>5,所以在后半段进行查找,
后半段如下 6, 7, 8, 9


第二步是与中间的元素索引是6的值7进行比较,因为8>7,所以继续在后半段进行查找,
后半段如下:8,9


第三步,此时的中间元素的索引是7的值8,即为我们我查找的值。


代码实现如下:

/*File Name: Binary SearchData Time:Anthor:*/#include <stdio.h>#include <stdlib.h>#define MAX 21typedef struct element{int key;}record;record data[MAX] = {2, 5, 7, 9, 17, 21, 25,33, 46,89,100, 121, 127, 139,237, 279, 302, 356, 455, 467, 500};int binary_search(int key, int low, int high){int mid;while(low <= high){mid = (low + high) / 2;if(key < data[mid].key)high = mid - 1;elseif(key > data[mid].key)low = mid + 1;elsereturn mid;}return -1;}int main(int argc, char** argv){int found;int value;while(1){printf("\n请输入查找值(0-500) ==> ");scanf("%d", &value);if(value != -1){found = binary_search(value, 0, MAX - 1);if(found != -1){printf("找到查找值: %d[%d]\n", value, found);}else{printf("没有哦找到查找值: %d\n", value);}}elseexit(1);}system("pause");return 0;}


读书人网 >其他相关

热点推荐