OC版-二分查找代码书写
2017-02-21 本文已影响168人
KennyHito
个人链接
- 博客园主页 : 博客园主页
- GitHub : 我的GitHub
- iOS程序猿(媛)~~ : 这是我个人整理的一个技术专题, 这里的文章都是比较有技术含量(不断更新)!
- 微信公众号 :
功能部分:</br>
二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的。它的基础思想:获取数组的中间值,将数组分割成两份,利用中间值跟指定的值进行比较,如果中间值大于指定的值,就在数组的左边进行查找;如果中间值小于指定值,就在数组的右边进行查找。如此循环的执行下去,最终找到符合的值。
二分查找优点:
1.速度快 2.比较次数少 3.性能好
当然了,
缺点也很明显:
1.必须是一个有序的数组(升序或者降序)
2.适用范围:适用不经常变动的数组
代码如下:</br>
- (void)viewDidLoad {
[super viewDidLoad];
NSArray * array1 = @[@3,@7,@9,@14,@25,@26,@37,@69];
int result = [self compare:array1 target:@26];//在这里打印结果看是否有相等的值
NSLog(@"%d",result);
}
- (int)compare:(NSArray *)array target:(int)target{
if (!array.count) {
return -1;//数组无元素,返回-1;
}
int low = 0;//数组起始元素下标
int high = array.count - 1;//数组最后元素的下标
while (low <= high) {
//会有一些朋友看到有些人是( low + high ) / 2这样写的,但是这样写有一点不好,就是low+high会出现整数溢出的情况,如果存在溢出,你再除以2也是没有用的,所以不能这么写
int mid = low + ((high - low)/2);
//第mid项的内容
int num = [array objectAtIndex:mid];
if (target == num) {
return low;
}else if (num > target){
high = mid - 1;//左边进行查找
}else{
low = mid +1;//右边进行查找
}
}
return -1;//数组中不存该数,返回-1;
}
声明
- 所有文章出自 Kenny Hito 的博客 !
- 未经本人允许不得转载, 转载请标明来源与作者, 谢谢合作!