1、什么是二分法查找?
简单粗暴一点理解二分法
(1)将数据有序排列:先将一个数据集进行有序排列(可根据某种数值的大小降序或升序<当然排序的规则可根据业务规则自定义>,前提是需要查找的数据具备该规则同样的属性);
(2)数据分半:就是将排序好的数据集切分成大致相等的两份数据;
(3)查找数据:把排序好的数据拆分为个数大致相等的两半,因为有排序,查找的时候先和其中一半数据种的最大或者最小的数进行比较来断定要查找的数据是否会包含被分割后的一半数据种,然后在满足判定条件的数据集中一次获取数据进行比对直到找到数据或者比较完所有数据返回没有该数据,
(4)文字太苍白:用例子进行表述一下便于我们快速理解;
题目是从[5,7,2,8,4,9,1,3,6] 快速查找到X在数据种的位置:
我们先要把 [2,-3,0,5,-1,,6] 进行排序[-3,-2,0,2,5,6] 然后进行拆分data1 [-3,-2,0] data2[2,5,8,6]
然后用查找X,是在数据中的位置,假如先从data1检索则如下:
如果x>data1[last]
则表示X不在data1 中(因为我们已经进行了排序的),则比较对象换成data2,那么我们把data2看成一个新的数据集继续进行拆分,把data2拆分成data2_1 和data2_2继续按照之前的规则进行比较,按照此规律直到找到X相同的值或者比较完data2所有的数据则返回;
如果x<data1[last]
则表示X绝对不会存在data2中(因为我们已经进行了排序的),可能存在data1中,那么又我们把data1看成一个新的数据集继续进行拆分,把拆data1分成data1_1 和data1_2,按照此规律直到找到X相同的值或者比较完data2所有的数据则返回;
如果x=data1[last]
那么返回data[last]的位置;
最后一张图来说明
2、特点
查找的时候可以减少比对数据的数量,加快查找速度,但只适用于排序数据,对数据排序本身又会消耗时间性能;