zoukankan      html  css  js  c++  java
  • iOS 学习

    1.快速排序

    原理:

    1. 先从数列中取出一个数作为基数
    2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
    3. 再对左右区间重复第二步,直到各区间只有一个数;对两侧元素递归排序 
    - (NSArray *)quickSort:(NSMutableArray *)dataArray {
        NSMutableArray *lessArray = [NSMutableArray array];
        NSMutableArray *bigArray  = [NSMutableArray array];
        if (dataArray.count < 1) {
            return dataArray;
        }
        int midNumber = arc4random() % [dataArray count];
        NSNumber *midValue = dataArray[midNumber];
        [dataArray removeObjectAtIndex:midNumber];
        for (NSNumber *number in dataArray) {
            if (number < midValue) {
                [lessArray addObject:number];
            }else{
                [bigArray addObject:number];
            }
        }
        NSMutableArray *tempArray = [NSMutableArray array];
        [tempArray addObjectsFromArray:[self quickSort:lessArray]];
        [tempArray addObject:midValue];
        [tempArray addObjectsFromArray:[self quickSort:bigArray]];
        return tempArray;
    }

    优化:从并发执行入手提升速度,利用 dispatch_apply 快速迭代器加速循环速度

    #pragma mark - 优化
    - (NSArray *)optimizeQuickSort:(NSMutableArray *)dataArray {
        NSMutableArray *lessArray = [NSMutableArray array];
        NSMutableArray *bigArray  = [NSMutableArray array];
        if (dataArray.count < 1) {
            return dataArray;
        }
        int midNumber = arc4random() % [dataArray count];
        NSNumber *midValue = dataArray[midNumber];
        [dataArray removeObjectAtIndex:midNumber];
        
        dispatch_queue_t concurrentQueue = dispatch_queue_create("com.cc.quickqeueue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_apply(dataArray.count, concurrentQueue, ^(size_t i) {
            int index = (int)i;
            NSNumber *num = dataArray[index];
            if (num < midValue) {
                [lessArray addObject:num];
            }else{
                [bigArray addObject:num];
            }
        });
        NSMutableArray *tempArray = [NSMutableArray array];
        [tempArray addObjectsFromArray:[self quickSort:lessArray]];
        [tempArray addObject:midValue];
        [tempArray addObjectsFromArray:[self quickSort:bigArray]];
        return tempArray;
    }

    2.冒泡算法

    越小的元素会经由交换慢慢"浮"到数列的顶端

    #pragma mark - 冒泡
    - (void)bubble:(NSMutableArray *)dataArray {
        id temp;
        for (int i = 0; i < dataArray.count; i++) {
            for (int j = 0; j < dataArray.count; j++) {
                if (dataArray[i] > dataArray[j]) {
                    temp = dataArray[i];
                    dataArray[i] = dataArray[j];
                    dataArray[j] = temp;
                }
            }
        }
        NSLog(@"%@",dataArray);
    }
  • 相关阅读:
    C# 线程安全的操作控件
    C# 使用HttpListener创建简易Web服务器
    PHP mjpeg 连续图片格式生成
    XAMPP PHP开发环境安装备忘
    dnspod CURL模拟访问
    在MAC上使用Fiddler抓包手机
    解决关于docker: Error response from daemon: endpoint with name v5 already exists in network bridge.
    【电子政务】政务服务事项相关概念知识:事项办理深度 四级标准
    转:脱机环境下window 使用pycharm 连接cx_oracle 连接数据库
    转 shell if判断写成一行 和 shell中如何注释掉一段话
  • 原文地址:https://www.cnblogs.com/asamu/p/5300335.html
Copyright © 2011-2022 走看看