Objective-C学习笔记-第一天(3)

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

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

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

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

1 #import <Foundation/Foundation.h>
2
3 @protocol AlgorithmProtocol <NSObject>
4
5 @optional
6 +(void)quickSortWithArray:(NSMutableArray*)array FirstIndex:(long)first EndIndex:(long)end CompareMethod:(bool(^)(id,id)) compare;
7
8 @end

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

 1 #import <Foundation/Foundation.h>
 2 #import "AlgorithmProtocol.h"
 3
 4 @interface Algorithm : NSObject <AlgorithmProtocol>
 5
 6 @end
 7
 8 @implementation Algorithm
 9
10 +(void)quickSortWithArray:(NSMutableArray*)array FirstIndex:(long)firstIndex EndIndex:(long)endIndex CompareMethod:(bool(^)(id,id)) compare{
11     long (^partition)(NSMutableArray*,long,long) = ^(NSMutableArray *innerArray,long first,long end){
12         long i = first;
13         long j = end;
14         while (i<j) {
15             while (i<j && !compare(innerArray[i],innerArray[j])) {
16                 j--;
17             }
18             if (i<j) {
19                 id tmp = innerArray[i];
20                 innerArray[i] = innerArray[j];
21                 innerArray[j] = tmp;
22                 i++;
23             }
24             while (i<j && !compare(innerArray[i],innerArray[j])) {
25                 i++;
26             }
27             if (i<j) {
28                 id tmp = innerArray[i];
29                 innerArray[i] = innerArray[j];
30                 innerArray[j] = tmp;
31                 j--;
32             }
33         }
34         return i;
35     };
36     if (firstIndex<endIndex) {
37         long pivot = 0;
38         pivot = partition(array,firstIndex,endIndex);
39         [self quickSortWithArray:array FirstIndex:firstIndex EndIndex:pivot-1 CompareMethod:compare];
40         [self quickSortWithArray:array FirstIndex:pivot+1 EndIndex:endIndex CompareMethod:compare];
41     }
42 }
43
44 @end

然后就是使用,main文件:

#import <Foundation/Foundation.h>
#import "Algorithm.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //测试数组
        NSMutableArray *array = [[NSMutableArray alloc] init];
        [array addObject:@12];
        [array addObject:@2];
        [array addObject:@33];
        [array addObject:@4];
        [array addObject:@54];
        NSMutableArray *arrayCopy = [array copy];

        [Algorithm quickSortWithArray:array FirstIndex:0 EndIndex:[array count] - 1 CompareMethod:^bool(id obj1, id obj2) {
            if (obj1>obj2){
                return true;
            }else{
                return false;
            }
        }];

        NSLog(@"\n排序前:%@\n排序后:%@",arrayCopy,array);
    }
    return 0;
}

验证一下结果:

时间: 2024-10-19 00:37:50

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

UI学习笔记---第一天

一.iOS概述 iOS是Apple公司的移动操作系统,主要?用于iPhone.iPad.iPad Mini.iPod Touch等移动产品. 借助iOS,我们可以开发视频类.美图类.新闻类.?音乐类.团购类.电商类.阅读类.出?行类.?生活服务类.游戏类等应?用程序. 除此之外,iOS还可以与外部设备通信,开发出更多改变?活的产品,?比 如:智能家居(iOS App控制电视.空调等).健?产品(将人体健康 状况通过App直观的展现出来)等. 二.UI概述 UI(User Interface):?

C#学习笔记—第一天

C#学习笔记—第一天 一.C#与.NET Framework的关系 C#编译器专门用于.NET,这表示用C#编写的所有代码总是使用.NET Framework运行.所以对于C#语言来说,可以有一下两个结论: 1)C#的 体系结构和方法论反映了.NET基础方法论. 2)在许多情况下,C#的特定语言功能取决于.NET的功能,或依赖于.NET的基类. 二..NET编译过程 1)将源代码编译成Microsoft中间语言IL(Intermediate Language): 2)公共语言运行库CLR把IL编

JavaScript学习笔记第一天——字符串连接的N种方法

Javascript 字符串的连接方法有多种,但效率却有很大区别. 1.逐个字符串相加 var arr = ['item 1', 'item 2', 'item 3', ...]; var list = ''; for (var i = 0, l = arr.length; i < l; i++) { list += '<li>' + arr[i] + '</li>'; } list = '<ul>' + list + '</ul>'; 这种最常见的,

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

Linux学习笔记——第一篇——Ubuntu安装与操作

笔者是Windows的使用者,由于Coding的需要以及在Linux下开发的方便,所以开始使用Linux. 当然笔者还是割舍不下Windows的,毕竟很多通讯工具等软件以及游戏在Linux下是没有发行的,所以笔者使用了虚拟机啊. 下面给出简单的安装过程. 1.下载虚拟机软件,笔者比较喜欢VMPlayer,因为它比较轻便且免费,并且很好的支持了拖拽复制功能(VM TOOL),当然也可以使用如VirtualBox.VPC等 链接:https://my.vmware.com/web/vmware/fr

latex学习笔记 第一章 LATEX须知

本学习笔记全部从http://www.latexstudio.net/archives/6058抽取总结而来. 第一章 LATEX须知 1.1 概述 1.1.1 TEX TEX是高德纳开发的.以排版文字和数学公式为目的的一个计算机软件. 1.1.2 LATEX LATEX为TEX基础上的一套格式,令作者能够使用预定义的专业格式以较高质量排版和印刷他们的作品. 1.2 LATEX命令和代码结构 LATEX的源代码本质上是文本文件.除了文字本身,LATEX源代码之外还包括大量的命令,用在排版公式.划

数据库系统概论学习笔记-第一章绪论

数据库系统概论-第一章绪论 写在前面:寒假来临,除却走亲戚和同学聚餐,王者荣耀等游戏上分花销一点时间之外,自认为要花一点时间学习数据库和Android,以此来为下学期和共建项目打下一丢丢的基础.为了鞭策自己,定了一个小目标( 一个亿),每个两至三天我会发表一篇数据库或Android学习笔记.还是那句话你的才华撑不住你的野心时,那就静下来学习吧 . 数据库系统概述 数据库常用的术语和基本概念 数据库基本概念 数据(Data) 数据是数据库中存储的基本对象,可以对数据做如下定义:描述事物的符号记录称

JavaScript学习笔记(第一章——第三章)

说明 参考资料:<JavaScript高级程序设计(第3版)> 笔记主要为<JavaScript高级程序设计(第3版)>读书记录,按照此书的章节学习记录.方便以后查询复习(PS:正版书99大洋,没舍得买.在淘宝46买了一本盗版的并带一本 <JavaScript DOM编程艺术(第2版)>).两本书同时阅读,但以<JavaScript高级程序设计(第3版)>为主要学习路线.重要说明性内容将以近似书中原文摘出(以免出现个人解释歧义),外加自己遇到特殊情况说明(不

K&amp;R 学习笔记 第一章

今天开始学习C语言,为了之后的游戏开发学习做好基础,其实在大一的时候学校有C语言的课程,学的马马虎虎,教学也比较浅显,感觉并不能学习到C语言的精髓.在经过多人推荐下,入手了K&R ,看了第一章之后,才发现的确值得这么多人称赞. 其实大多数书的第一章都是差不多的,以Hello World 引出本书学习的知识体系的顺序,有趣的是之后的练习,也是要花一番功夫的. 1.4 提到了幻数,所谓幻数,就是在程序中直接使用的数字.C语言的传统方式是使用#define行来对付幻数.C语言预处理程序是一个强有力的工

学习笔记第一周

机电传动控制技术从广义上来说,就是要使生产机械设备,生产线,车间,甚至整个工厂都实现自动化.而现在的制造自动化面临的问题还很多.包括全球化,数字化和信息化,越来越短的产品生命周期,复杂的关联技术,以及有限的资源等五大问题.机电传动技术早就不单单着眼于传动二字.从电气系统,到机械系统,它们之间的转化,只是现代机电控制系统的基本要素.作为一个工程师,更要站在产业自动化的高度,去完善系统. 现代的工程师,第一,需要更高的价值竞争意识,不管是环境成本,人力成本,能源成本,时间成本,还是原材料的成本都应该