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.159 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.158 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.157 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.156 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.155 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.154 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.153 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.152 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.151 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.150 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.149 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.148 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.147 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.146 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.145 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.144 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.143 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.142 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.141 tracks/objective-c/exercises/binary-search/BinarySearchExample.m
trackler-2.2.1.140 tracks/objective-c/exercises/binary-search/BinarySearchExample.m