美文网首页
常用排序算法OC语言实现

常用排序算法OC语言实现

作者: hui8685291 | 来源:发表于2021-04-05 20:22 被阅读0次

    冒泡排序:

    - (void)maoPaoSort:(NSArray *)arr{
        NSMutableArray *getArr = [[NSMutableArray alloc]initWithArray:arr];
        int abc = 0;
        NSInteger count = getArr.count;
        for (NSInteger i = 0; i < count - 1; i++) {
            for (NSInteger j = 0; j < count - 1 - i; j++) {
                 abc++;
                NSInteger a = [getArr [j] integerValue];
                NSInteger b = [getArr [j+1] integerValue];
                if (a < b) {
                    NSNumber *temp = getArr[j];
                    getArr[j] = getArr[j+1];
                    getArr[j+1] = temp;
                }
                
            }
        }
        NSLog(@"排序后的数组===%@",getArr);
      NSLog(@"循环次数%d",abc);
    }
    

    选择排序

    
    - (void)selectSort:(NSArray *)arr{
        //每次轮询找出最小的那一个然后放到数组前面
        NSMutableArray *getArr = [[NSMutableArray alloc]initWithArray:arr];
        NSInteger count = getArr.count;
         int abc = 0;
    
        for (NSInteger i = 0; i < count - 1; i++) {
            NSInteger minValue = [getArr[i] integerValue];
            NSInteger minIndex = i;
            
            for (NSInteger j = i+1; j < count; j++) {
                NSInteger temp = [getArr[j] integerValue];
            
                if (minValue < temp ) {
                    minValue = temp;
                    minIndex = j;
                }
                
                abc++;
            }
            [getArr exchangeObjectAtIndex:minIndex withObjectAtIndex:i];
        }
        
          NSLog(@"排序后的数组===%@",getArr);
        NSLog(@"循环次数%d",abc);
    
    }
    
    

    直接插入排序

    - (void)directInsertSort:(NSArray *)arr{
        NSMutableArray *getArr = [[NSMutableArray alloc]initWithArray:arr];
        NSInteger count = getArr.count;
        int abc = 0;
        for (NSInteger i = 1 ; i < count; i++) {
            NSInteger tempIndex = i;
            NSInteger tempValue = [getArr[i] integerValue];
            NSLog(@"__%ld",(long)tempValue);
            while (tempIndex > 0 && tempValue < [getArr[tempIndex-1] integerValue]) {
                getArr[tempIndex] = getArr[tempIndex - 1];
                tempIndex--;
                abc++;
            }
            
            getArr[tempIndex] = @(tempValue) ;
            
        }
        
        
        NSLog(@"插入排序后的数组===%@",getArr);
        NSLog(@"循环次数%d",abc);
        
    }
    
    

    快速排序

    - (void)fastSort:(NSMutableArray *)getArr leftIndex:(NSInteger)left rightIndex:(NSInteger)right{
        if (left > right) {
            return;
        }
    //    NSInteger count = getArr.count;
        
        NSInteger i = left;
        NSInteger j = right;
        NSInteger key = [getArr[i]integerValue];
    
        
        while (i < j) {
            while (i < j && key >= [getArr[j]integerValue]) {
                j--;
            }
            getArr[i] = getArr[j];
            while (i < j && key <= [getArr[i]integerValue]) {
                i++;
            }
            getArr[j] = getArr[i];
        }
        
        getArr[i] = @(key);
        
        [self fastSort:getArr leftIndex:left rightIndex:i-1];
        [self fastSort:getArr leftIndex:i+1 rightIndex:right];
        
    //    NSLog(@"排序后的数组===%@",getArr);
    
    }
    

    相关文章

      网友评论

          本文标题:常用排序算法OC语言实现

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