二分查找法及延伸

                                                                                                                                            点击此处返回总目录

 

 

 

一、二分查找

二分查找,又叫折半查找。

 

代码记住。

 

 

二分查找法及延伸

 

 

二、二分查找,如果能找到target就返回target,如果找不到target就返回比target小一点的那个数。

 

例如:

 0 1 2 3 4  5   6   7   8    9

[1,3,4,5,7, 9 ,11,14,16, 22]

 

想找8。

low = 0, high = 9

mid=4, a[4] = 7<8 , low = mid+1 = 5, high = 9

mid = 7 , a[7] = 14>8 , high = mid-1 = 6 , low = 5

mid = 5 , a[5] = 9>8 , high = mid - 1 = 4 ,low = 5

high<low, 小于8的数为a[low-1]或者a[high]

 

再比如:

 0 1 2 3 4  5   6   7   8    9

[1,3,4,5,7, 9 ,11,14,16, 22]

 

想找2.

low = 0 ,high = 9

mid = 4 ,a[4] = 7>2。high = mid-1 = 3。 low = 0。

mid= 1,a[1]=3>2。high= mid-1 = 0。 low = 0。

mid =0, a[0] = 1<2 。 low = mid +1 =1。 high = 0.

high < low,小于2的数为a[low-1]或者a[high]

 

 

再比如:

 0 1 2

[1,2,3] 

想找2.5。

low = 0 ,high = 2

mid = 1, a[1] = 2<2.5。 low= mid+1 = 2。 high= 2。

mid = 2 , a[2] =3>2.5。 high = mid-1=1。low=2.

high <low,小于2.5的数是a[low-1]或者a[high]

 

 

再比如:

[1]

想找2。

low = 0 ,high = 0

mid = 0 , a[0]=1<2。 low = mid+1 = 2。high = 0。

high<low,小于2的数是a[low-1]或者a[high]

 

 

综上,还是使用二分查找的代码,当差找不到时,下标low-1或者high对应的值就是小于target的值。

 

代码:

二分查找法及延伸

 

结果:

二分查找法及延伸

感谢我女朋友提供的方法~~~