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

来源:互联网 发布:如何做淘宝卖家 编辑:程序博客网 时间:2024/05/17 21:43

本人是一名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;

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

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

        }else{

            start = mind;

        }

    }

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

        return start;

    }

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

        return end;

    }

    return -1;

}

1 0
原创粉丝点击