首先提供一些排序文章供大家参考学习
常用排序算法总结
iOS-八大基本排序
Sort 各类算法和时间复杂度分析
关于iOS中,我们有自己的"sort”尚方宝剑,主要涉及的有NSComparisonResult和compare
NSComparisonResult
typedef NS_CLOSED_ENUM(NSInteger, NSComparisonResult) {
NSOrderedAscending = -1L,
NSOrderedSame,
NSOrderedDescending
};
NSComparisonResult 是一个枚举类型里面包含三个值
NSOrderedAscending = -1L,表示两个比较的对象前者小于后置
NSOrderedSame, 表示比较的对象相等
NSOrderedDescending表示两个比较的对象前者大于后者
compare:
字符串比较大小的函数,返回NSComparisonResult
使用NSComparator排序
数组排序方法(升序)
- (void)arraySortASC {
// 数组排序
// 定义一个数字数组
NSArray *array = @[@(3),@(4),@(2),@(1)];
// 对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@~%@",obj1,obj2); // 3~4 2~1 3~1 3~2
return [obj1 compare:obj2]; // 升序
}];
NSLog(@"result=%@",result);
}
数组排序方法
- (void)arraySortDESC {
// 数组排序
// 定义一个数字数组
NSArray *array = @[@(3),@(4),@(2),@(1)];
// 对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@~%@",obj1,obj2); // 3~4 2~1 3~1 3~2
return [obj2 compare:obj1]; // 降序
}];
NSLog(@"result=%@",result);
}
数组排序方法(乱序)
- (void)arraySortBreak {
// 数组排序
// 定义一个数字数组
NSArray *array = @[@(3),@(4),@(2),@(1),@(5),@(6),@(0)];
// 对数组进行排序
NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@~%@",obj1,obj2);
// 乱序
if (arc4random_uniform(2) == 0) {
return [obj2 compare:obj1]; // 降序
} else {
return [obj1 compare:obj2]; // 升序
}
}];
NSLog(@"result=%@",result);
}
使用NSDescriptor排序(NSSet,NSArray,NSMutableArray)
单关键字排序
NSMutableArray *array = [NSMutableArray array];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES];
[array sortUsingDescriptors:[NSArray arrayWithObject:sort]];
多关键字排序
NSMutableArray *array = [NSMutableArray array];
......
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"key1" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"key2" ascending:NO];
[array sortUsingDescriptors:[NSArray arrayWithObjects:sort1, sort2, nil]];
其中ascending为YES表示升序排列
详细也可看这篇文章分享 iOS浅析排序规则描述类: NSSortDescriptor