标签:就是 查找 要求 记录 sea 存储结构 维护 利用 ref
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求
线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
二分查找法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况
下用O(log n)完成搜索任务。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成
功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步
查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子
表不存在为止,此时查找不成功。
二分查找的实现方法太多,这是由不同的需求所决定的。下面列出最为简单的两种,其余几种皆可类推。
int bisearch(int array[], int low, int high, int target) { while (low <= high) { int mid = low + (high - low) / 2; if (array[mid] < target) low = mid + 1; else if (array[mid] > target) high = mid - 1; else return mid; } return low; }
int bisearch(int array[], int low, int high, int target) { while (low <= high) { int mid = low + (high - low) / 2; if (array[mid] < target) low = mid + 1; else high = mid - 1; } return low; }
关于中位数,mid = low + (high - low) / 2 = (2 * low + high - low) / 2 = (low + high) / 2。就算式来说,
两式相等,但是由于后者有溢出风险,前者最为保险。循环的结束条件为 low > high,这个不用多说。
满足结束条件后,返回low,其实二分查找的整个过程都在维护low,只有中位数小于目标元素时low
才前进,不会后退,逐渐逼近目标数,low就是目标数该插入的位置。
标签:就是 查找 要求 记录 sea 存储结构 维护 利用 ref
原文地址:https://www.cnblogs.com/Gland/p/Gland.html