MDCQuickSelect 0.1.0

MDCQuickSelect 0.1.0

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新发布2014年12月

Brian Gesiak维护。



用于快速选择数组中的“第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比原始方法性能要好,有时差别很大。运行基准测试,看看结果吧!