用于快速选择数组中的“第n个最...”元素或“第n个”元素(未排序)的分类。
例如,如果需要在一个包含10万个元素的数组中找到第10个最小的数字
#import <MDCQuickSelect/MDCQuickSelect.h>
// 79% faster than sorting the numbers and accessing -objectAtIndex:10
NSNumber *tenth = [numbers mdc_objectAtIndex:10
inSortedArrayUsingComparator:^NSComparisonResult(NSNumber *left, NSNumber *right) {
return [left compare: right];
}];
或在一个包含10万个元素的数组中找到前10个最小的数字
// 71% faster than sorting the numbers and accessing -subarrayWithRange:NSMakeRange(0, 10)
[numbers mdc_subarrayWithRange:NSMakeRange(0, 10)
inSortedArrayUsingComparator:^NSComparisonResult(NSNumber *left, NSNumber *right){
return [left.numberOfFriends compare:right.numberOfFriends];
}];
通过使用由快速排序算法的发明者Tony Hoare开发的快速选择算法,实现了改进的性能。
当数组大小小于150个元素时,性能略微下降。对于超过150个元素的数组,MDCQuickSelect比原始方法性能要好,有时差别很大。运行基准测试,看看结果吧!