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 运行,不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代理传值. 属性传值:属性传值是最简单,也是最常见的一种传值方式,但 ...
随机推荐
- Oracle 给已创建的表增加自增长列
对于已经创建的表,在特殊需求下,需要增加一个自增长列步骤: --1. 增加 自增长列 ); --2. 程序方式更新设置 IdNum 列 值 --3.查询最大 ) From Limsbusinessen ...
- MVC显示Base64图片
本篇演示ASP.NET MVC应用程序,显示Base64图片. Insus.NET浏览网页,发现一个站点http://www.base64-image.de/ 想起以前也有实现过<如何把数据流转 ...
- TFS(Team Foundation Server)敏捷使用教程(四):工作项跟踪(1)
工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看看?"我也一直很好奇别的公司T ...
- Direct3D11学习:(一)开发环境配置
转载请注明出处:http://www.cnblogs.com/Ray1024 从今天开始,开启一个新的系列:Direct3D11的学习教程. 因为一直对3D方面比较感兴趣,最近决定开始学习D3D知 ...
- Mysql学习笔记(十一)临时表+视图
学习内容: 临时表和视图的基本操作... 临时表与视图的使用范围... 1.临时表 临时表:临时表,想必大家都知道这个概念的存在...但是我们什么时候应该使用到临时表呢?当一个数据库存在着大量的数 ...
- 轻松认识JVM运行时数据区域(使用思维导图)
下面是个人阅读周志明编写的深入浅出Java虚拟机做成思维导图的笔记,线条.颜色和图片的视觉印象比起单纯文字笔记好得太多了,文字笔记的枯燥以及硬性记忆我就不再多说,特别对于JVM这块略微有点枯燥的知识, ...
- Gradle学习系列之二——创建Task的多种方法
在本系列的上篇文章中,我们讲到了Gradle入门,在本篇文章中我们将讲到创建Task的多种方法. 请通过以下方式下载本系列文章的Github示例代码: git clone https://github ...
- iOS7 UI兼容 导航栏按钮边框 UINavigationItem left and right padding
iOS7之前的UI为: 而在iOS7中,由于设计方面的原因,使得UI变为: 修改的方法重写UINavigationItem的setLeftBarButtonItem和setRightBarButton ...
- 在WPF中使用文件夹选择对话框
开发中有时会想实现"选择某个文件夹"的效果: 在WPF中,使用Microsoft.Win32.OpenFileDialog只能选择文件,FolderBrowserDialog只能用 ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...