美文网首页
简单算法:

简单算法:

作者: marlonxlj | 来源:发表于2019-10-31 16:42 被阅读0次

快速排序

快速排序的最坏运行情况是 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];
//            }
//        }
//    }

}

相关文章

  • 算法与数据结构(二):排序篇-O(n^2)算法:选择 &

    排序基础 O(n^2)的算法虽然简单,但也实用!让我们从最简单的基础排序算法开始,打开我们的算法大门! 排序算法 ...

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

  • 简单算法

    冒泡排序: while 实现的二分查找: 递归实现二分查找:

  • 简单算法

    一、3种简单排序 3种排序方法时间复杂度都是n23种简单排序对 数组排序速度: 插入排序 > 选择排序 > 冒泡法...

  • 【简单算法】

    1.不用中间变量,用两种方法交换A和B的值 2.求最大公约数 3.不用内置函数求一个数的平方根 4.用最有效率的方...

  • 简单算法

    一、回文数说明:类似与"aaabaaa","ababa"等对称字符 二、数组去重说明:[1,2,3,4,5,1,7...

  • 简单算法

    面试算法题四部曲: clarification(询问题目细节,边界条件,可能的极端错误情况)。 Possible ...

  • 简单算法:

    快速排序 快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 ...

  • 简单算法

    实现 trim 斐波那契数列 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1...

  • 《机器学习(周志华)》学习笔记(三)

    Q:机器学习中最简单的学习算法是什么? A:最简单的机器学习算法莫过于线性回归算法了。线性回归算法的基本形式如下:...

网友评论

      本文标题:简单算法:

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