二分查找 分块查找
二分查找(折半查找)
前提条件:数组中的数据必须是有序的
核心逻辑:每次排除一半的查找范围
代码案例:
总结:
1.二分查找的优势?
提前查找效率
2.二分查找的前提条件?
数据必须是有序的
如果数据是乱的,先排序再用二分查找得到的索引没有实际意义,只能确定当前数字在数组中是否存在,因为排序之后数字的位置就可能发生变化了
3.二分查找的过程
min和max表示当前要查找的范围
mid是在ain和max中间的
如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid减1
如果要查找的元素在mid的右边,缩小范围时,max不变,min等于mid加1
插值查找(二分查找的改进)
斐波那契查找:
小结:
1.二分查找、插值查找,斐波那契额查询各自的特点
相同点:
都是通过不断的缩小范围来查找对应的数据的
不同点:
计算mid的方式不一样
二分查找:mid每次都是指向范围的中间位置
插值查找:mid尽可能的靠近要查找的数据,但是要求数据尽可能的分布均匀
斐波那契额查找:根据黄金分割点来计算mid指向的位置
分块查找:
代码案例:
先写个Javabeen
class block {
private int max;
private int startIndex;// 起始索引
private int endIndex;// 结束索引
public block() {
}
public block(int max, int startIndex, int endIndex) {
this.max = max;
this.startIndex = startIndex;
this.endIndex = endIndex;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEndIndex() {
return endIndex;
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}
}