折半法查找数组中指定数字的位置并返回
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
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- C++二分法在数组中查找关键字的方法