【发布时间】:2017-12-05 17:22:19
【问题描述】:
我一直在 Objective-C 中实现不同的排序算法(快速排序、归并排序、冒泡排序)。但是我还没有找到任何明确的桶排序算法实现
我正在尝试在目标 C 中找到一个简单有效的桶排序算法实现。
【问题讨论】:
标签: objective-c algorithm sorting bucket-sort
我一直在 Objective-C 中实现不同的排序算法(快速排序、归并排序、冒泡排序)。但是我还没有找到任何明确的桶排序算法实现
我正在尝试在目标 C 中找到一个简单有效的桶排序算法实现。
【问题讨论】:
标签: objective-c algorithm sorting bucket-sort
我最终自己做了,如果有人需要,这是我的实现:
- (NSArray*)bucketSort:(NSArray<NSNumber*> *)array buckets:(NSInteger)k {
// Initialize array of buckets
NSMutableArray<NSMutableArray*> *buckets = [NSMutableArray arrayWithCapacity:k];
for (int i=0; i < buckets.count; i++)
buckets[i] = [NSMutableArray new];
// Add elements to buckets
for (int i=0; i < buckets.count; i++) {
NSInteger index = k * array[i].floatValue; // Asuming "array" has values between 0 and 1
if (index < buckets.count) [buckets[index] addObject:array[i]];
}
NSMutableArray *sortedArray = [NSMutableArray new];
// Sort individual buckets
// Concatenate all sorted buckets in order
for (int i=0; i < buckets.count; i++) {
buckets[i] = [self quickSort:buckets[i]]; // Sorting algorithm like quicksort/mergesort/insertionsort
[sortedArray addObjectsFromArray:buckets[i]];
}
return sortedArray;
}
【讨论】:
if 没有else 时向桶添加元素,所以if 是多余的或某些元素无法添加到任何桶.您还可以通过组合最后两个循环使其更“高效”,但您必须确定这是否符合您的“简单”目标。 (使用 Obj-C 数组对浮点数进行排序当然不会特别有效,但这与算法本身的有效实现是正交的。)HTH
else 的if 是有意的,它只是一个安全检查,不要超出数组的范围并使程序崩溃。异常或错误报告应该在else 上进行。感谢您对最后两个循环的注释,我将更正解决方案。你会推荐一个不同的集合来在 Obj-C 中实现这个算法吗?