zoukankan      html  css  js  c++  java
  • OC版二分查找

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

    二分查找优点:1.速度快 2.比较次数少 3.性能好  当然了,缺点也很明显:1.必须是一个有序的数组(升序或者降序) 2.适用范围:适用不经常变动的数组

    上源代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
       NSArray * array1 = @[@1,@2,@3,@4,@5,@6,@7,@9];
        
        int result = [self compare:array1 target:@9];
        //在这里打印结果看是否有相等的值
        NSLog(@"%d",result);
    }
    
    - (int)compare:(NSArray *)array target:(int)target{
        
        if (!array.count) {
            return -1;
        }
        
       unsigned int low = 0;
       unsigned int high = array.count - 1;
        
        while (low <= high) {
            //会有一些朋友看到有些人是( low + high ) / 2这样写的,但是这样写有一点不好,就是low+high会出现整数溢出的情况,如果存在溢出,你再除以2也是没有用的,所以不能这么写
            int mid = low + ((high - low)/2);
            
            //第mid项的内容
            int num = [array objectAtIndex:mid];
            
            if (target == num) {
                return low;
            }else if (num > target){
                high = mid - 1;//左边进行查找
            }else{
                low = mid +1;//右边进行查找
            }
        }
        return -1;//返回-1是没找到
    }

    好了,简单的介绍二分查找,如果有错误,请加以指正。

  • 相关阅读:
    每日一题_191208
    每日一题_191207
    每日一题_191206
    每日一题_191205
    每日一题_191204
    每日一题_191203
    每日一题_191202
    每日一题_191201
    每日一题_191130
    2020届成都一诊理科16题
  • 原文地址:https://www.cnblogs.com/losedMemory/p/5857639.html
Copyright © 2011-2022 走看看