二分法

一、二分法

1.二分法只适用于已经做好排序的数列。

2.二分法(Bisection method) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点。

3二分法的时间复杂度:T(n)=O(logn)2

二、使用

1.由于二分法是以有序数列为前提,所以在使用中会有限制。

2.代码

- (void)viewDidLoad {
 [super viewDidLoad];
 
 NSArray *arr = @[@1,@20,@30,@45,@50,@55,@60,@66,@70];
 NSInteger x = 70,min,max,mid;
 min = 0;
 max = arr.count - 1;
 mid = (min + max) / 2;
 
 for (int i = 0; i < arr.count; i++)
 {
 if ([arr[mid] integerValue] == x)
 {
 NSLog(@"查找次数为--->%d次",i);
 NSLog(@"寻找值位置为--->%ld",mid);
 return;
 }else if ([arr[mid] integerValue] > x)
 {
 max = mid - 1;
 mid = (min + max) / 2;
 }else if ([arr[mid] integerValue] < x)
 {
 min = mid + 1;
 mid = (min + max) / 2;
 }
 }
 }

三、注意

ios其实已经提供了数组里数值的查找方法:

    NSArray *array =@[@"1",@"2"];
    NSInteger index = [array indexOfObject:@"1"];
原文地址:https://www.cnblogs.com/huadeng/p/7081695.html