美文网首页
插入排序objective-C版本

插入排序objective-C版本

作者: 张俊凯 | 来源:发表于2019-01-11 18:42 被阅读11次
    /**
     新建一个可变数组,挨个从原数组中拿出数字,跟第一个比,如果小,就放在第一位,如果大,从第二个数字开始比,小于等于 就插到前面,大于就跟下一个比,依次类推,比到最后一个数字时,如果大于最后一个,添加到数组最后一个
     经过测试,效率是选择排序的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;
    };
    
    

    相关文章

      网友评论

          本文标题:插入排序objective-C版本

          本文链接:https://www.haomeiwen.com/subject/eccfdqtx.html