iOS 学习 - 1.代理传值
1.快速排序
原理:
- 先从数列中取出一个数作为基数
- 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
- 再对左右区间重复第二步,直到各区间只有一个数;对两侧元素递归排序
- (NSArray *)quickSort:(NSMutableArray *)dataArray {
NSMutableArray *lessArray = [NSMutableArray array];
NSMutableArray *bigArray = [NSMutableArray array];
if (dataArray.count < ) {
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 < ) {
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 = ; i < dataArray.count; i++) {
for (int j = ; j < dataArray.count; j++) {
if (dataArray[i] > dataArray[j]) {
temp = dataArray[i];
dataArray[i] = dataArray[j];
dataArray[j] = temp;
}
}
}
NSLog(@"%@",dataArray);
}
iOS 学习 - 1.代理传值的更多相关文章
- ios学习-delegate、传值、跳转页面
ios学习-delegate.传值.跳转页面 1.打开xcode,然后选择ios--Application--Empty Application一个空项目. 项目目录: 2.输入项目名称以及选 ...
- iOS学习之六种传值方式
iOS页面传值方式 应用于: 两个互动的界面:1)页面一跳转到页面二,页面一的textField的值传给页面二的label.2)A页面跳转到B页面,B页面再跳转回A页面(注册页面跟登录页面) 两个不互 ...
- IOS学习3——代理
本文转载自:你真的了解iOS代理设计模式吗? 在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递一些参数.这篇文章会涵盖代理的使用技巧和原理,以及代理的内存 ...
- iOS学习——页面的传值方式
一.简述 在iOS开发过程中,页面跳转时在页面之间进行数据传递是很常见的事情,我们称这个过程为页面传值.页面跳转过程中,从主页面跳转到子页面的数据传递称之为正向传值:反之,从子页面返回主页面时的数据传 ...
- iOS 再谈 代理传值,block反向传值
本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...
- IOS pop使用代理传值
假如oneViewController页面push到OtherViewController页面,然后你想从OtherViewController页面pop到oneViewController页面的时候 ...
- 【iOS】代理传值与块代码传值
主线程与子线程常常须要进行数据的传递.不同的类之间,不同的控制器之间都须要. 并且常常须要监听一个动作的完毕.而后才去做对应事件. (代理是一对一的关系). 一.代理传值 代理是一种设计模式. iOS ...
- iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值
有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳 ...
- iOS 页面间传值 之 属性传值,代理传值
手机 APP 运行,不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代理传值. 属性传值:属性传值是最简单,也是最常见的一种传值方式,但 ...
随机推荐
- Laravel在不同的环境调用不同的配置文件
Laravel在不同的环境调用不同的配置文件 Laravel如何在不同的环境调用不同的配置文件?社区这个问题问的蛮多,如何优雅的方法实现呢,应该有好多方法吧,我一般习惯用两种方法,设置环境变量,或 ...
- coding代码仓库的配置和代码上传
1.生成ssh 在桌面右键,选择Git Bash Here,进入操作界面,输入“ssh-keygen -t rsa -b 4096 -c "xxxxxxxx@xxx.com(自己注册时绑定的 ...
- iOS-Debug调试
转载:http://www.cnblogs.com/Leo_wl/p/4423922.html
- 关于Form.Close跟Form.Dispose
我们在Winform开发的时候,使用From.Show来显示窗口,使用Form.Close来关闭窗口.熟悉Winform开发的想必对这些非常熟悉.但是Form类型实现了IDisposable接口,那我 ...
- 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task
E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...
- [新手学Java]使用beanUtils控制javabean
使用BeanUtils设置/读取属性的值以及默认支持的自动转化: @Test //使用BeanUtils设置/读取属性的值以及自动转化 public void test1() throws Illeg ...
- ubuntu修改hostname
在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后:其二,在终端窗口中输入命令:hostname或uname – ...
- Java NIO中的读和写
一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 ...
- 【C#进阶系列】08 方法
实例构造与引用类型 之前的章节其实已经写过了引用类型的构造过程: 首先当然是,在堆中,为引用类型的实例对象分配内存,然后初始化对象的附加字段(即类型对象指针和同步块索引). 这个时候为对象分配的内存都 ...
- 与众不同 windows phone (48) - 8.0 其它: C# 调用 C++
[源码下载] 与众不同 windows phone (48) - 8.0 其它: C# 调用 C++ 作者:webabcd 介绍与众不同 windows phone 8.0 之 其它 C# 中调用 W ...