iOS开发(OC)——排序算法

iOS开发交流群:301058503

1、冒泡排序
(1)算法原理:(升序)进行 n-1 趟的相邻比较,大的放在右边,每趟拿到一个最大值放在最右边
(2)时间复杂度:n(n-1)/2
(3)代码

+ (NSMutableArray *)mapaoSort:(NSMutableArray *)array {
    NSInteger count = 0;
    for (int i=0; i [array[j+1] integerValue]) {
                [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
            count++;
        }
    }
    NSLog(@"count=%zu",count);
    return array;
}

2、鸡尾酒排序
(1)算法原理:(升序)先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到低位大于等于高位
(2)时间复杂度:n(n-1)/2
(3)代码

+ (NSMutableArray *)jiweijiuSort:(NSMutableArray *)array {
    NSInteger count = 0;
    NSInteger low = 0;
    NSInteger high = array.count-1;
    while (low < high) {
        for (NSInteger i=low+1; i<=high; i++) {
            if ([array[low] integerValue] > [array[i] integerValue]) {
                [array exchangeObjectAtIndex:low withObjectAtIndex:i];
            }
            count++;
        }
        low++;
        
        for (NSInteger j=high-1; j>=low; j--) {
            if ([array[high] integerValue] < [array[j] integerValue]) {
                [array exchangeObjectAtIndex:high withObjectAtIndex:j];
            }
            count++;
        }
        high--;
    }
    NSLog(@"count=%zu",count);
    return array;
}

3、选择排序
(1)算法原理:进行 n-1 趟,每趟找出一个最值
(2)时间复杂度:n(n-1)/2
(3)代码

+ (NSMutableArray *)selectSort:(NSMutableArray *)array {
    NSInteger count = 0;
    for (int i=0; i [array[j] integerValue]) {
                min = [array[j] integerValue];
                index = j;
            }
            count++;
        }
        [array exchangeObjectAtIndex:index withObjectAtIndex:i];
    }
    NSLog(@"count=%zu",count);
    return array;
}

4、插入排序
(1)算法原理:向有序的队列增加新值
(2)时间复杂度: (3)代码

+ (NSMutableArray *)insertSort:(NSMutableArray *)array {
    if (array.count == 0) {
        return array;
    }
    NSMutableArray *results = [NSMutableArray arrayWithObject:array[0]];
    NSInteger count = 0;
    for (NSInteger i=1; i= [results[results.count-1] integerValue]) {
                [results addObject:array[i]];
                break;
            }
            if (j+1 < results.count && [array[i] integerValue] >= [results[j] integerValue] && [array[i] integerValue] <= [results[j+1] integerValue]) {
                 [results insertObject:array[i] atIndex:j+1];
                break;
            }
        }
       
    }
    NSLog(@"count=%zu",count);
    return results;
}

5、二分插入排序
(1)算法原理:基于插入排序。由于插入排序是向有序的队列进行插入,那么在有序的队列中,我们可以使用更高效二分法去查找位置,而不需要从头到尾地遍历
(2)时间复杂度:<插入排序
(3)代码

+ (NSMutableArray *)halfInsertSort:(NSMutableArray *)array {
    if (array.count == 0) {
        return array;
    }
    NSMutableArray *results = [NSMutableArray arrayWithObject:array[0]];
    NSInteger count = 0;
    for (NSInteger i=1; i= [results[mid] integerValue]) {
                low = mid+1;
            } else {
                high = mid-1;
            }
            count++;
        }
        
        [results insertObject:array[i] atIndex:low];
    }
    NSLog(@"count=%zu",count);
    return results;
}

你可能感兴趣的:(OC)