Objective-C快速枚举冒泡排序

我正在尝试将一些GCD集成到我的代码中,并且发现严重的瓶颈是我在大型数组中的对象之间执行的泡泡比较。这是原始代码:
NSUInteger count = [arrayToDoWorkOn count];
for (int i = 0; i < count; i++)
{
    for (int j = i + 1; j < count; j++)
    {
        [[arrayToDoWorkOn objectAtIndex:i] compare:[arrayToDoWorkOn objectAtIndex:j]];
    }
}
让我的漂移?因此,许多其他快速枚举任务可以通过转换轻松实现GCD
for (id obj in array)
{
    [obj aMessage:stuff];
}
至:
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
    [obj aMessage:stuff];
}];
有没有办法将我的前瞻 - sorta-bubble-sorta-algorithm-thing转换为可以提供给GCD块实现的东西?     
已邀请:
如果
NSArray
已经有一个内置的方法,我不建议实现你自己的排序,它很可能比你想出的任何东西排序更快。你可以使用这个:
NSArray *sortedArray = [arrayToDoWorkOn sortedArrayWithComparator:^(id firstObject, id secondObject) {
    /* comparison code (e.g. return [[firstObject title] compareTo:[secondObject title]], or something) */
}];
现在,如果你需要在排序过程中使用这些对象,那么你就是一个泡菜,但我建议你考虑一下比冒泡排序更有效率(快速排序是一个非常好的排序)。 除此之外,我觉得你对GCD有点困惑。编写和使用块本身并不是用GCD执行的;必须手动完成(严格来说,块只是代码行的集合,并不固有地与GCD有关; GCD只是使用块来执行)。
NSArray
enumerateObjectsUsingBlock:
方法很可能不使用GCD来枚举数组(至少参考文献没有对此进行深入了解,所以请证明我错了),如果确实如此,那不是因为你提供了一个块,而是因为这就是Apple选择实施它的方式。大多数采用块的方法都不使用GCD来执行它们。 我建议您阅读Grand Central Dispatch(GCD)参考以及Cocoa Samurai的块指南和GCD,以更深入地了解该主题的细节。     
这篇文章可能会帮助您或其他有类似问题的人。     

要回复问题请先登录注册