话不多说,学了这么多,写个快速排序先。

除了快排,以后有时间还要加堆排、归并等等。

今天学了有,类、协议、语法。

因为算法类,不止一个算法。所以新建一个Algorithm(算法)协议:

 #import <Foundation/Foundation.h>

 @protocol AlgorithmProtocol <NSObject>

 @optional
+(void)quickSortWithArray:(NSMutableArray*)array FirstIndex:(long)first EndIndex:(long)end CompareMethod:(bool(^)(id,id)) compare; @end

接下来,新建一个Algorithm(算法)类,遵循算法协议:

 #import <Foundation/Foundation.h>
#import "AlgorithmProtocol.h" @interface Algorithm : NSObject <AlgorithmProtocol> @end @implementation Algorithm +(void)quickSortWithArray:(NSMutableArray*)array FirstIndex:(long)firstIndex EndIndex:(long)endIndex CompareMethod:(bool(^)(id,id)) compare{
long (^partition)(NSMutableArray*,long,long) = ^(NSMutableArray *innerArray,long first,long end){
long i = first;
long j = end;
while (i<j) {
while (i<j && !compare(innerArray[i],innerArray[j])) {
j--;
}
if (i<j) {
id tmp = innerArray[i];
innerArray[i] = innerArray[j];
innerArray[j] = tmp;
i++;
}
while (i<j && !compare(innerArray[i],innerArray[j])) {
i++;
}
if (i<j) {
id tmp = innerArray[i];
innerArray[i] = innerArray[j];
innerArray[j] = tmp;
j--;
}
}
return i;
};
if (firstIndex<endIndex) {
long pivot = ;
pivot = partition(array,firstIndex,endIndex);
[self quickSortWithArray:array FirstIndex:firstIndex EndIndex:pivot- CompareMethod:compare];
[self quickSortWithArray:array FirstIndex:pivot+ EndIndex:endIndex CompareMethod:compare];
}
} @end

然后就是使用,main文件:

#import <Foundation/Foundation.h>
#import "Algorithm.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
//测试数组
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:@];
[array addObject:@];
[array addObject:@];
[array addObject:@];
[array addObject:@];
NSMutableArray *arrayCopy = [array copy]; [Algorithm quickSortWithArray:array FirstIndex: EndIndex:[array count] - CompareMethod:^bool(id obj1, id obj2) {
if (obj1>obj2){
return true;
}else{
return false;
}
}]; NSLog(@"\n排序前:%@\n排序后:%@",arrayCopy,array);
}
return ;
}

验证一下结果:

Objective-C学习笔记-第一天(3)的更多相关文章

  1. ActionBarSherlock学习笔记 第一篇——部署

    ActionBarSherlock学习笔记 第一篇--部署          ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...

  2. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  3. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  4. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  5. GIT学习笔记——第一章

    git之vim编辑器退出命令 # 学习笔记 张文军微博主页  张文军码云主页   张文军新浪云主页  张文军博客主页 ## 刚学习git,好多东西没接触过,进入vim后不知道如何出来了,网上找了很多都 ...

  6. 《JavaScript权威指南》学习笔记 第一天。

    这是零零散散的笔记,作为自己看书打demo的笔记.不足为各位学习,留作自己复习知识点备用. 1.检测对象中某个属性存在不存在: <script> // in 运算符 //不管是对象的自有属 ...

  7. PRML学习笔记第一章

    [转] PRML笔记 - 1.1介绍 模式识别的目标 自动从数据中发现潜在规律,以利用这些规律做后续操作,如数据分类等. 模型选择和参数调节 类似的一族规律通常可以以一种模型的形式为表达,选择合适模型 ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. AndroidStudio学习笔记-第一个安卓程序

    要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序. 第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basic ...

  10. 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    blog.csdn.net/totogo2010/article/details/8205810  目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...

随机推荐

  1. 使用C# yield关键字来提高性能和可读性

    对于”yield”这个关键字我已经见过N次了,直到最近我才知道这个关键字所蕴含的力量.我将在下面展示出一些使用”yield”让你的代码有更高可读性和更好性能的例子. 为了让你对yield有一些快速概览 ...

  2. jquery判断id是否存在

    1.判断标签是否存在 ){ 存在 } 2.判断(id="id名"的标签)是否存在,下面的不可以!!!因为 $("#id") 不管对象是否存在都会返回 objec ...

  3. python之rabbitMQ篇

    一.RabbitMQ安装 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统,它遵循Mozilla Pulic License开源协议. MQ全称为Message Queue,消息队列 ...

  4. Exchange Server 2013就地存档

    9.1就地存档 就地存档有助于重新获得对组织邮件数据的控制,而无需个人存储 (.pst) 文件,并且允许用户在可通过 Microsoft Outlook 2010及更高版本和 Microsoft Of ...

  5. 20 个值得一试的JavaScript 框架

      投递人 itwriter 发布于 2011-09-26 17:46 评论(3) 有1956人阅读 原文链接 [收藏] « » 本文介绍 20 个值得一试的 JavaScript 框架,如果你认为答 ...

  6. 凯撒加密(key为3)

    基本思想: 加密是把字符串中的每一个字符+3解密是每一个字符-3 源代码: package demo;import java.util.Scanner; class Encryption{ Strin ...

  7. Linux命令基本格式及目录处理命令

    命令提示符 [root@localhost ~]# root:当前登录用户 localhost:主机名 ~:当前所在的目录,此处为"家"目录 #:root超级用户的提示符,如果是普 ...

  8. 标准DSO设置

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110

    上位机:ubuntu14.04 64bit 下位机:qq2440 交叉编译器:arm-linux-gcc 3.4.1 下位机使用的linux内核版本:kernel2.6.13 1.插入u盘时错误信息如 ...

  10. Java面向对象三大特点之继承

    概念: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 生活中的继承: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类 ...