简单算法:

快速排序

快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多

冒泡排序

- (void)test{
    
    NSMutableArray *array = @[@20,@18,@0,@12,@3,@22,@8,@24,@30,@9].mutableCopy;
//    [self quickSortArray:array leftIndex:0 rightIndex:array.count - 1];
    [self bubbleSortWithArray:array];
    NSLog(@"%@",array);
}

//快速排序
- (void)quickSortArray:(NSMutableArray *)sortArray leftIndex:(NSInteger)leftIndex rightIndex:(NSInteger)rightIndex{
    
    //如果左边的大于右边的就返回
    if (leftIndex >= rightIndex) {
        return;
    }
    
    NSInteger i = leftIndex;
    NSInteger j = rightIndex;
    
    //记录的基准数key
    NSInteger key = [sortArray[i] integerValue];
    
    while (i < j) {
        //从右边j开始找比Key基数小的指
        while (i < j && [sortArray[j] integerValue] >= key) {//如果比基数大就继续查找
            j--;
        }
        //如果比基数小,就将查到的小值和i交换位置
        sortArray[i] = sortArray[j];
        
        //当在右边查找到一个比基准数小的值时,就从i开始往后找比基准数大的值
        while (i < j && [sortArray[i] integerValue] <= key) {////如果比基准数小,继续查找
            i++;
        }
        //如果比基准数大,则将查找到的大值调换到j的位置
        sortArray[j] = sortArray[i];
    }
    
    //将基准数放到正确的位置
    sortArray[i] = @(key);
    
    /**** 递归排序 ***/
    //排序基准数左边的
    [self quickSortArray:sortArray leftIndex:leftIndex rightIndex:i - 1];
    [self quickSortArray:sortArray leftIndex:i+1 rightIndex:rightIndex];
}
//冒泡排序
- (void)bubbleSortWithArray:(NSMutableArray *)sortArray{
    
    for (int i = 0; i < sortArray.count - 1; i++) {

        for (int j = 0; j < sortArray.count - 1 - i; j++) {

            if ([sortArray[j] integerValue] > [sortArray[j + 1] integerValue]) {
                [sortArray exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
            }
        }
    }
    
//    for (int i = 0; i < sortArray.count; i++) {
//        for (int j = i + 1; j < sortArray.count; j++) {
//
//            if ([sortArray[i] integerValue] > [sortArray[j] integerValue]) {
//                [sortArray exchangeObjectAtIndex:i withObjectAtIndex:j];
//            }
//        }
//    }

}

你可能感兴趣的:(简单算法:)