标签:中间 折半查找 sea 数据集 线性表 复杂度 获得 二分查找 算法
说明:元素必须是有序的,如果是无序的则需要先进行排序操作;
基本思想:
也称为折半查找,属于有序查找算法。用给定值k先与中间节点的关键字比较,中间节点把线形表分成两个子表,若相等则查表成功;若不相等,再根据k与该中间节点关键字的比较结果确定下一步查找哪一个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的节点;
复杂度分析:时间复杂度为O(log2^n),远远好于顺序查找的O(n),是一种效率较高的查找方法(二分查找的优点);
二分查找的缺点:虽然二分查找的效率高,但是要将表按关键字排序,而排序本身是一种很费时的运算;
注:折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找能够获得不错的效率;但是对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找,链表上无法实现二分查找。
示例代码:
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 6, 8, 9};
System.out.println(binary_Search(arr, 8));
}
public static int binary_Search(int[] arr, int num) {
int low = 0;
int high = arr.length -1;
int mid;
while(low < high) {
mid = (high + low) / 2;
if(arr[mid] < num) {
low = mid + 1;
} else if(arr[mid] > num) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
标签:中间 折半查找 sea 数据集 线性表 复杂度 获得 二分查找 算法
原文地址:https://www.cnblogs.com/yuanfei1110111/p/10204385.html