Sha256: d988bfee68c91a157ba3fa67bd2a4f6b52acbf712f7a0468fd42f5c09ce87b2f

Contents?: true

Size: 1.5 KB

Versions: 268

Compression:

Stored size: 1.5 KB

Contents

#import "BinarySearchExample.h"

@implementation BinarySearch

- (instancetype)initWithArray:(NSArray<NSNumber *> *)array {
    self = [super init];
        
    if (self) {
        // This binary search algorithm only works if the array is already is ascending order.
        if ([array isEqualToArray:[array sortedArrayUsingSelector:@selector(compare:)]]) {
            _list = array;
        } else {
            return nil;
        }
    }
    
    return self;
}

- (NSInteger)searchFor:(int)number {
    NSInteger middleIndex = [self middle];
    int middle = [self.list[middleIndex] intValue];
    
    if (middle == number) {
        return middleIndex;
    } else if (middle > number) {
        NSArray *sublist = [self.list subarrayWithRange:NSMakeRange(0, middleIndex)];
        
        BinarySearch *binary = [[BinarySearch alloc] initWithArray:sublist];
        if (!binary) {
            return NSNotFound;
        }
        
        return [binary searchFor:number];
    } else { //!OCLint
        NSUInteger length = self.list.count - middleIndex;
        NSArray *sublist = [self.list subarrayWithRange:NSMakeRange(middleIndex, length)];
        if ([sublist isEqualToArray:self.list]) {
            return NSNotFound;
        }
        
        BinarySearch *binary = [[BinarySearch alloc] initWithArray:sublist];
        if (!binary) {
            return NSNotFound;
        }
        
        return [binary searchFor:number] + middleIndex;
    }
}

- (NSInteger)middle {
    return self.list.count / 2;
}

@end

Version data entries

268 entries across 268 versions & 1 rubygems

Version Path
trackler-2.2.1.98 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.97 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.96 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.95 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.94 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.93 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.92 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.91 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.90 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.89 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.88 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.87 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.86 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.85 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.84 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.83 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.82 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.81 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.80 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.79 tracks/objective-c/exercises/binary-search/BinarySearchExample.m