首先是header文件:
#import <Foundation/Foundation.h>
@interface Sort : NSObject{
}
//冒泡排序
-(void)bunbleSortWithArray:(NSArray *)aData;
//选择排序
-(void)selectSortWithArray:(NSArray *)aData;
//插入排序
-(void)insertSortWithArray:(NSArray *)aData;
//快速排序,对冒泡排序的一种改进
-(void)quickSortWithArray:(NSArray *)aData;
-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2;
@end
接着是实现:
#import "Sort.h"
@interface Sort()
-(void)quickSortWithArray:(NSArray *)aData left:(NSInteger)left right:(NSInteger)right;
@end
@implementation Sort
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
-(void)bunbleSortWithArray:(NSArray *)aData{
NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
for (int i=0; i<[data count]-1; i++) {
for (int j =0; j<[data count]-1-i; j++) {
if ([data objectAtIndex:j] > [data objectAtIndex:j+1]) {
[self swapWithData:data index1:j index2:j+1];
}
}
}
NSLog(@"冒泡排序后的结果:%@",[data description]);
}
-(void)selectSortWithArray:(NSArray *)aData{
NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
for (int i=0; i<[data count]-1; i++) {
int m =i;
for (int j =i+1; j<[data count]; j++) {
if ([data objectAtIndex:j] < [data objectAtIndex:m]) {
m = j;
}
}
if (m != i) {
[self swapWithData:data index1:m index2:i];
}
}
NSLog(@"选择排序后的结果:%@",[data description]);
}
-(void)insertSortWithArray:(NSArray *)aData{
NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
for (int i = 1; i < [data count]; i++) {
id tmp = [data objectAtIndex:i];
int j = i-1;
while (j != -1 && [data objectAtIndex:j] > tmp) {
[data replaceObjectAtIndex:j+1 withObject:[data objectAtIndex:j]];
j--;
}
[data replaceObjectAtIndex:j+1 withObject:tmp];
}
NSLog(@"插入排序后的结果:%@",[data description]);
}
-(void)quickSortWithArray:(NSArray *)aData{
NSMutableArray *data = [[NSMutableArray alloc] initWithArray:aData];
[self quickSortWithArray:data left:0 right:[aData count]-1];
NSLog(@"快速排序后的结果:%@",[data description]);
}
-(void)quickSortWithArray:(NSMutableArray *)aData left:(NSInteger)left right:(NSInteger)right{
if (right > left) {
NSInteger i = left;
NSInteger j = right + 1;
while (true) {
while (i+1 < [aData count] && [aData objectAtIndex:++i] < [aData objectAtIndex:left]) ;
while (j-1 > -1 && [aData objectAtIndex:--j] > [aData objectAtIndex:left]) ;
if (i >= j) {
break;
}
[self swapWithData:aData index1:i index2:j];
}
[self swapWithData:aData index1:left index2:j];
[self quickSortWithArray:aData left:left right:j-1];
[self quickSortWithArray:aData left:j+1 right:right];
}
}
//-(void)dealloc{
//}
-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2{
NSNumber *tmp = [aData objectAtIndex:index1];
[aData replaceObjectAtIndex:index1 withObject:[aData objectAtIndex:index2]];
[aData replaceObjectAtIndex:index2 withObject:tmp];
}
@end
然后写main函数测试:
#import <Foundation/Foundation.h>
#import "Sort.h"
#define kSize 20
#define kMax 100
int main (int argc, const char * argv[])
{
// insert code here...
NSLog(@"Hello, World!");
NSMutableArray *data = [[NSMutableArray alloc] initWithCapacity:kSize];
for (int i =0;i<kSize;i++) {
u_int32_t x = arc4random() % kMax;//0~kMax
NSNumber *num = [[NSNumber alloc] initWithInt:x];
[data addObject:num];
}
NSLog(@"排序前的数据:%@",[data description]);
Sort *sort = [[Sort alloc] init];
[sort bunbleSortWithArray:data];
[sort selectSortWithArray:data];
[sort insertSortWithArray:data];
[sort quickSortWithArray:data];
return 0;
}
分享到:
相关推荐
用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计...
这儿的运行时系统扮演的角色类似于Objective-C语言的操作系统,Objective-C基于该系统来工作。本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加
使用objective-c语言实现的socket,有iphone平台下的,也有mac平台下的。对加深ios socket编程有一定帮助。
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
《objective-c程序设计》通过大量的实例系统地介绍了objective-c语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读《objective-c程序设计》后,可以掌握objective-c语言的基本内容,并进行实际的iphone/...
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写...
基于Objective-C语言实现图文混排的编辑器源码.zip
《Objective-C 程序设计(第4版)》作者假设读者没有面向对象程序语言或者C语言(Objective-C基础)编程经验,因此,初学者和有经验的程序员都可以使用这本《Objective-C 程序设计(第4版)》学习Objective-C。...
C语言主要知识点巩固(学习Objective-C 的前提),PPT格式。
Objective-C - NSURLSession实现短信验证码注册登录完整示例:Objective-C - NSURLSession.m和附件说明
冒泡排序即是依次比较相邻的两个数,如果后面的数较小则交换到前面一个数的位置上,这里我们来看一下Objective-C实现冒泡排序算法的简单示例
Objective-C 是一种通用、面向对象的编程语言,广泛应用于 macOS 和 iOS 等苹果平台...本教程提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C 编程,并开始构建 macOS 和 iOS 应用程序。
中文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009...
在windows系统下搭建Objective-C开发环境,由于公司要做iphone开发,个人学习objc(Objective-C)语法,所以在windows7下搭建了一个objc开发环境,现把自己整理的帮助文档拿来与大家分享,希望能对大家有所帮助。...
Amazon超级畅销书,好评如潮,全面解读Objective-C语言及Cocoa特性,用最通俗的语言阐释深奥的知识。 Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。 本书结合理论知识与示例程序,全面...
elcome to Learn Objective- C on the Mac! This book is designed to teach you the basics of the Objective- C language. Objective- C is a superset of C and is the language used by many (if not most) ...
这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语法。.zip
用objective-c实现全排列算法,用数组来保存全排列排列的结果
objective-c实现authCode 解决php与ios通信加密的问题