插入排序objective-C版本

/**
 新建一个可变数组,挨个从原数组中拿出数字,跟第一个比,如果小,就放在第一位,如果大,从第二个数字开始比,小于等于 就插到前面,大于就跟下一个比,依次类推,比到最后一个数字时,如果大于最后一个,添加到数组最后一个
 经过测试,效率是选择排序的2.2倍
 
 */
+(NSArray *)insertionSort:(NSArray <NSString *>*)originalArray{
    
    NSInteger count = 0;
    
    CFTimeInterval begin = CFAbsoluteTimeGetCurrent();
    NSMutableArray *marray = [NSMutableArray array];
    
    for (int i = 0; i < originalArray.count; i++) {
         NSString *number = (NSString *)originalArray[i];
        if (i == 0) {
            [marray addObject:number];
            count ++;
            continue;
        }
        
         NSString *minNumber = marray[0];
        if ([number integerValue] <= [minNumber integerValue]) {
            [marray insertObject:number atIndex:0];
            count ++;
            continue;
        }else{//大于首位
            
           
            //插入到第一位后面
            if (marray.count == 1) {
                [marray addObject:number];
                count ++;
                continue;
            }
            
            NSInteger j = 1;
            
            do {
                NSString *backNumber = marray[j];
                
                if ([number integerValue] <= [backNumber integerValue]) {
                    [marray insertObject:number atIndex:j];
                    j = marray.count;//结束循环
                    count ++;
                    continue;
                }
                
                //当前数字 比最后一位数字 还大的时候 添加进去
                if (j == marray.count - 1) {
                    [marray addObject:number];
                    j = marray.count;//结束循环
                    count ++;
                    continue;
                }
                
                j++;
                count ++;
            } while (j < marray.count);

        }

    }

    
    CFTimeInterval end = CFAbsoluteTimeGetCurrent();
    NSLog(@"插入排序循环-----%ld次",count);
    
    NSLog(@"插入排序耗时-----%.6f", end - begin);
    
    return marray;
};

猜你喜欢

转载自blog.csdn.net/weixin_33766805/article/details/87123769