您的位置:首页 > 职场人生

折半法查找数组中指定数字的位置并返回

2016-04-12 15:15 459 查看
昨天出去面试遇到的一个笔试题, 按照自己的思路做了一下, 结果竟然没有写对, 今天总结了下, 重新测试了一下,总结如下!

//
//  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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息