二分查找(简单版)——数组下标表示

来源:互联网 发布:指南针淘宝店是正品吗 编辑:程序博客网 时间:2024/05/21 10:39

6. 折半查找 请点评

如果不是从一组随机的序列里查找,而是从一组排好序的序列里找出某个元素的位置,则可以有更快的算法:

例 11.4. 折半查找

#include <stdio.h>#define LEN 8int a[LEN] = { 1, 2, 2, 2, 5, 6, 8, 9 };int binarysearch(int number){int mid, start = 0, end = LEN - 1;while (start <= end) {mid = (start + end) / 2;if (a[mid] < number)start = mid + 1;else if (a[mid] > number)end = mid - 1;elsereturn mid;}return -1;}int main(void){printf("%d\n", binarysearch(5));return 0;}

由于这个序列已经从小到大排好序了,每次取中间的元素和待查找的元素比较,如果中间的元素比待查找的元素小,就说明“如果待查找的元素存在,一定位于序列的后半部分”,这样可以把搜索范围缩小到后半部分,然后再次使用这种算法迭代。这种“每次将搜索范围缩小一半”的思想称为折半查找(Binary Search)。思考一下,这个算法的时间复杂度是多少?