• 二分查找iOS


    二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的。它的基础思想:获取数组的中间值,将数组分割成两份,利用查找的值跟中间值进行比较,如果查找的值大于中间值,就在数组的右边进行查找;如果查找的值小于中间值,就在数组的左边进行查找。如此循环的执行下去,最终找到符合的值。

    二分查找

    优点:
    1.速度快 2.比较次数少 3.性能好

    缺点:

    1.必须是一个有序的数组(升序或者降序)
    2.适用范围:适用不经常变动的数组

    在没使用算法之前时间复杂度是O(N),而在使用算法之后,时间复杂度就变成了O(logN)

        NSArray * array1 = @[@3,@7,@9,@14,@25,@26,@37,@69];

        NSInteger result = [self binarySearchTarget:@26 inArray:array1];//在这里打印结果看是否有相等的值

        NSLog(@"%ld",(long)result);

     

     

     

     

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

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

        if (arr.count < 1) {

            //数组无元素,返回-1;

            return -1;

        }

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

        NSInteger start = 0;

        NSInteger end = arr.count - 1;

        NSInteger mind = 0;

        // 进行循环 // 数组中第一个对象和最后一个对象之前还有其他对象则进行循环

        while (start < end - 1) {

            //会有一些朋友看到有些人是( start + end ) / 2这样写的,但是这样写有一点不好,就是start+end会出现整数溢出的情况,如果存在溢出,你再除以2也是没有用的,所以不能这么写

            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;

    }

  • 相关阅读:
    Expedition---POJ
    LIS的优化算法O(n log n)
    Super Jumping! Jumping! Jumping! ---HDU
    数据库连接判断
    android stuido控件
    sql查询语句
    c# 字符串操作
    windows操作
    C# sql操作
    datagridview
  • 原文地址:https://www.cnblogs.com/huangzs/p/7583435.html
Copyright © 2020-2023  润新知