前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发中使用算法之二分搜索算法

iOS开发中使用算法之二分搜索算法

作者头像
用户1451823
发布2018-09-13 15:34:02
5080
发布2018-09-13 15:34:02
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337722

本人是一名iOS开发程序猿,说实话在之前的开发项目中并没有到多少算法,算法对于本人也可以说是个硬伤。最近在找工作,面试官就会提到一些算法,由于不常用算法也就很难很好地回答面试的问题。由于之前学习过C以及数据结构现在再看看一些常用算法还是能很快理解并掌握的,下面就说说常用的搜索算法--二分搜索算法。

为什么要使用算法?

(个人愚见:iOS客户端开始主要是展示界面,将一些数据以界面的方式展示给用户,至于一些数据的处理已经在后台处理过了,我们是直接获取后台的数据的,而且OC是面向对象的,好多算法的东西也已经被某些方法封装了,如:在数组中插入某个位置插入一个元素,所以个人感觉iOS开发中使用算法的场景很少。当然这只是个人愚见,而且很可能被某些大神批判、不屑,而且这种想法很有可能被未来某天的自己所鄙视,但这种想法是现在的我的真实想法。)

使用算法是为了提高开发效率,突然想到之前看到的一副动态图,动态图分为两部分,上部分是一条狗叼着一根木棍往门里冲,可木棍的长度长于门的宽度,导致狗始终无法通过门,而且狗还在一直横冲直撞。下部分同样是一条狗叼着一根木棍往门里冲,可当狗发现木棍的长度长于门的宽度的时候,狗进行了几秒的“思考”,然后把脖子一歪,木棍也随然斜了,正好能让狗通过门。动态图的标题是“不会算法的程序员和会算法的程序员的区别”。动态图很搞笑,可揭露的问题却很深刻。不会算法的程序猿只会蛮干一起,最后可能也无法实现目的,即时实现了也算是暴力实现,效率并不怎么高,而这就是我们要学习使用算法的原因。

在没使用算法之前时间复杂度是O(N),而在使用算法之后,时间复杂度就变成了O(logN),大大节省了时间,提高了开发效率。

二分搜索使用的前提是搜索的数据是有序的,如:升序。当然如果数据是无序的我们也可以先利用冒泡算法将无序的数据变成有序的数据,然后再利用二分搜索法进行搜索。

二分搜索的思路:首先我们需要获取三个值,分别是第一个数据、最后一个数据、中间数据。然后我们需要进行数据的比较,先比较中间值是否等于我们的目标值,如果中间值大于我们的目标值,我们则将中间值做为最后一个数据,如果中间值小于我们的目标值,我们则将中间值做为第一个数据,这样就出现了一串新的有序的数据,然后再比较目标值是否等于第一值和最后一个值,就这样进行循环,直到在搜索数据中找到目标值。

OC代码:

// 在某个数组中搜索目标

  • (NSInteger)binarySearchTarget:(NSInteger)target inArray:(NSArray *)arr{

if (arr.count <1) {

return -1;

    }

// 定义三个变量第一个值下标、中间值下标、最后一个值下标

NSInteger start =0;

NSInteger end = arr.count -1;

NSInteger mind =0;

// 进行循环

while (start < end -1) {   // 数组中第一个对象和最后一个对象之前还有其他对象则进行循环

        mind = start + (end - start) / 2;   // (start + end) / 2;

if ([arrmindintegerValue]> target) {// 如果中间值大于目标值

            end = mind; // 中间值做为最后一个值,在前半段再进行相同的搜索

        }else{

            start = mind;

        }

    }

if ([arrstartintegerValue] == target) { // 如果第一个值和目标值相等则获取第一个值的下标

return start;

    }

if ([arrendintegerValue] == target) {   // 如果最后一个值和目标值想等则获取最后一个下标

return end;

    }

return -1;

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档