昨天出去面试遇到的一个笔试题, 按照自己的思路做了一下, 结果竟然没有写对, 今天总结了下, 重新测试了一下,总结如下!
//
// ViewController.m
// 折半算法
//
// Created by Wangjunling on 16/4/12.
// Copyright © 2016年 Wangjunling. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) NSArray *arr;
@end
@implementation ViewController
//加载一个包含0-99的有序数组
- (NSArray *)arr {
if (_arr == nil) {
NSMutableArray *arrayM = [NSMutableArray array];
for (int i = 0; i < 100; ++i) {
[arrayM addObject:@(i)];
}
_arr = arrayM.copy;
}
return _arr;
}
- (void)viewDidLoad {
[super viewDidLoad];
for (int i = 0; i < self.arr.count; i++) {
NSInteger index = [self indexSearch:i fromArr:self.arr];
NSLog(@"%d 位置%ld", i, (long)index);
}
}
- (NSInteger)indexSearch:(NSInteger)n fromArr:(NSArray *)arr {
//开始位置
NSInteger low = 0;
//结束位置
NSInteger high = arr.count;
//中间位置
NSInteger mid = 0;
//记录搜索次数
int searchCount = 0;
while(low <= high) {
mid=(high+low)/2;
searchCount++;
if (n == [arr[mid] intValue]) {
break;
}
else if (n < [arr[mid] intValue]) {
high=mid-1;
} else {
low=mid+1;
}
}
NSLog(@"搜索了%d",searchCount);
return mid;
}
@end