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.18 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.17 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.16 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.15 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.14 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.13 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.12 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.11 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.10 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.9 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.8 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.7 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.6 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.5 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.4 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.3 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.2 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.1 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.0 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.0.6 tracks/objective-c/exercises/binary-search/BinarySearchExample.m