冒泡排序的两个例子(objective-c)
2015-12-17 20:03
435 查看
mian.m
#import <Foundation/Foundation.h>
#import "NSArray+Sort.h"
#import "Student.h"
int main(int argc,
const char * argv[]) {
@autoreleasepool {
NSArray *array=[[NSArray
alloc]init];
array=@[@"abc",@"123",@"listen"];
NSLog(@"排序前是:%@",array);
NSArray *sortedArray=[array
sortedArrayUsingMyBlock:^NSComparisonResult(id obj1,
id obj2) {//定义数组
按照NSArray+Sort中for循环i和j的值所值的地址里的进行比较数组array里的值
数组里面包含调用方法执行之后返回的三种返回值 NSOrderedDescending(升序) NSOrderedSame
(相等) NSOrderedAscending(降序)
return [obj1
compare:obj2];//返回值是obj1和obj2比较之后的值有三种值
}];
NSLog(@"排序后:%@",sortedArray);
Student *st=[[Student
alloc]initWithName:@"tingyuxuan"
andAge:12];
Student *st1=[[Student
alloc]initWithName:@"gengbiao"
andAge:16];
Student *st2=[[Student
alloc]initWithName:@"xiaoxiao"
andAge:13];
Student *st3=[[Student
alloc]initWithName:@"fenmengwulei"
andAge:19];
NSArray *array2=@[st1,st2,st3,st];//定义一个数组
并且将定义好的STUDENT放进去
NSComparator com=^NSComparisonResult(id obj1 ,id
obj2){//调用NSComparator类型定义
并将STUDENT类型传进去
Student *stuobj1=(Student*)obj1;//将定义好的STUDENT按照顺序放入到stuobj1和stuobj2中
Student *stuobj2=(Student*)obj2;
if (stuobj1.age>stuobj2.age) {//让STUDENT类型的stuobj1和stuobj2中的年龄进行比较
比较过后按照对应的条件返回对应的值
return
NSOrderedDescending;//降序
}
else
if(stuobj1.age==stuobj2.age)
{
return
NSOrderedSame;
}
else
{
return
NSOrderedAscending;//升序
如果NSOrderedAscending和NSOrderedDescending反过来的话可以进行反向排序
}
};
NSArray *sortedStuArray=[array2
sortedArrayUsingMyBlock:com];//调用sortedArrayUsingMyBlock返回值是com中比较过后返回的值按照sortedArrayUsingMyBlock里面的方法定义返回
并将返回的值放入到sortedStuArray数组中打印
NSLog(@"排序后:%@",sortedStuArray);
}
return 0;
}
student.h
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,strong)NSString*name;
@property(nonatomic)int age;
-(id)initWithName:(NSString*)name andAge:(int)age;
@end
student.m
#import "Student.h"
@implementation Student
-(id)initWithName:(NSString *)name andAge:(int)age
{
if (self=[super
init]) {
_name=name;
_age=age;
}
return
self;
}
-(NSString*)description
{
NSString *dect=[NSString
stringWithFormat:@"name=:%@ age=%d",_name,_age];
return dect;
}
@end
NSArray+Sort.h
#import <Foundation/Foundation.h>
@interface NSArray (Sort)
-(NSArray*)sortedArrayUsingMyBlock:(NSComparator)comparator;
@end
NSArray+Sort.m
#import "NSArray+Sort.h"
@implementation NSArray (Sort)
-(NSArray*)sortedArrayUsingMyBlock:(NSComparator)comparator
{
//1. 创建一个可变数组
NSMutableArray *array=[self
mutableCopy];
//2.冒泡排序
for (int i=0; i<[self
count]-1; i++) {//
for (int j=0; j<[self
count]-1-i;j++ ) {
if (comparator([array
objectAtIndex:j],[array objectAtIndex:j+1])==NSOrderedDescending) {//用当前传进来的参数
(代码块变量comparator)
判断此代码块 的返回值
如果是降序 则交换两个对象
升序则不动 方法执行之后返回的值进行比较
判断
[array exchangeObjectAtIndex:j
withObjectAtIndex:j+1];
}
}
}
return (NSArray*)array;
}
@end
打印结果是
排序前是:(
abc,
123,
listen
)
排序后:(
123,
abc,
listen
)
排序后:(
"name=:tingyuxuan age=12",
"name=:xiaoxiao age=13",
"name=:gengbiao age=16",
"name=:fenmengwulei age=19"
)
#import <Foundation/Foundation.h>
#import "NSArray+Sort.h"
#import "Student.h"
int main(int argc,
const char * argv[]) {
@autoreleasepool {
NSArray *array=[[NSArray
alloc]init];
array=@[@"abc",@"123",@"listen"];
NSLog(@"排序前是:%@",array);
NSArray *sortedArray=[array
sortedArrayUsingMyBlock:^NSComparisonResult(id obj1,
id obj2) {//定义数组
按照NSArray+Sort中for循环i和j的值所值的地址里的进行比较数组array里的值
数组里面包含调用方法执行之后返回的三种返回值 NSOrderedDescending(升序) NSOrderedSame
(相等) NSOrderedAscending(降序)
return [obj1
compare:obj2];//返回值是obj1和obj2比较之后的值有三种值
}];
NSLog(@"排序后:%@",sortedArray);
Student *st=[[Student
alloc]initWithName:@"tingyuxuan"
andAge:12];
Student *st1=[[Student
alloc]initWithName:@"gengbiao"
andAge:16];
Student *st2=[[Student
alloc]initWithName:@"xiaoxiao"
andAge:13];
Student *st3=[[Student
alloc]initWithName:@"fenmengwulei"
andAge:19];
NSArray *array2=@[st1,st2,st3,st];//定义一个数组
并且将定义好的STUDENT放进去
NSComparator com=^NSComparisonResult(id obj1 ,id
obj2){//调用NSComparator类型定义
并将STUDENT类型传进去
Student *stuobj1=(Student*)obj1;//将定义好的STUDENT按照顺序放入到stuobj1和stuobj2中
Student *stuobj2=(Student*)obj2;
if (stuobj1.age>stuobj2.age) {//让STUDENT类型的stuobj1和stuobj2中的年龄进行比较
比较过后按照对应的条件返回对应的值
return
NSOrderedDescending;//降序
}
else
if(stuobj1.age==stuobj2.age)
{
return
NSOrderedSame;
}
else
{
return
NSOrderedAscending;//升序
如果NSOrderedAscending和NSOrderedDescending反过来的话可以进行反向排序
}
};
NSArray *sortedStuArray=[array2
sortedArrayUsingMyBlock:com];//调用sortedArrayUsingMyBlock返回值是com中比较过后返回的值按照sortedArrayUsingMyBlock里面的方法定义返回
并将返回的值放入到sortedStuArray数组中打印
NSLog(@"排序后:%@",sortedStuArray);
}
return 0;
}
student.h
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,strong)NSString*name;
@property(nonatomic)int age;
-(id)initWithName:(NSString*)name andAge:(int)age;
@end
student.m
#import "Student.h"
@implementation Student
-(id)initWithName:(NSString *)name andAge:(int)age
{
if (self=[super
init]) {
_name=name;
_age=age;
}
return
self;
}
-(NSString*)description
{
NSString *dect=[NSString
stringWithFormat:@"name=:%@ age=%d",_name,_age];
return dect;
}
@end
NSArray+Sort.h
#import <Foundation/Foundation.h>
@interface NSArray (Sort)
-(NSArray*)sortedArrayUsingMyBlock:(NSComparator)comparator;
@end
NSArray+Sort.m
#import "NSArray+Sort.h"
@implementation NSArray (Sort)
-(NSArray*)sortedArrayUsingMyBlock:(NSComparator)comparator
{
//1. 创建一个可变数组
NSMutableArray *array=[self
mutableCopy];
//2.冒泡排序
for (int i=0; i<[self
count]-1; i++) {//
for (int j=0; j<[self
count]-1-i;j++ ) {
if (comparator([array
objectAtIndex:j],[array objectAtIndex:j+1])==NSOrderedDescending) {//用当前传进来的参数
(代码块变量comparator)
判断此代码块 的返回值
如果是降序 则交换两个对象
升序则不动 方法执行之后返回的值进行比较
判断
[array exchangeObjectAtIndex:j
withObjectAtIndex:j+1];
}
}
}
return (NSArray*)array;
}
@end
打印结果是
排序前是:(
abc,
123,
listen
)
排序后:(
123,
abc,
listen
)
排序后:(
"name=:tingyuxuan age=12",
"name=:xiaoxiao age=13",
"name=:gengbiao age=16",
"name=:fenmengwulei age=19"
)
相关文章推荐
- Objective-c语言_练习题3
- Objective-C中的内存管理
- Objective--C UISegmentedControl 交通灯
- Object-c学习笔记
- Objective--C Slider实现三原色之间颜色变化
- Objective--C UIControl 简易本地音频播放器
- Java基础--面向对象(多态、Object类)
- 翻译:采用现代Objective-C
- Objective--C UI手势
- Responder object
- Objective-c语言_NSDate(时间类型)和NSCalendar(日历)和NSTimeZone(时区)
- Objective-c语言_NSData(不可变数据)和NSMutableData(可变数据)
- 十分钟让你明白Objective-C的语法(和Java、C++的对比)
- Objective-C Block的实现
- Lock object
- Object-C 类,对象,运行时,isa
- Objective-C的单例模式如何新建和测试?
- JSONObject使用方法详解
- 必须了解的Object知识
- Objective-C 中singleton(单例模式)的实现