oc代码实现归并排序
时间: 2023-10-14 07:16:47 浏览: 99
下面是使用 Objective-C 语言实现归并排序的示例代码:
```objc
#import <Foundation/Foundation.h>
// 合并两个有序数组
- (NSArray *)mergeArray:(NSArray *)leftArray rightArray:(NSArray *)rightArray {
NSMutableArray *result = [NSMutableArray array];
NSInteger i = 0, j = 0;
while (i < leftArray.count && j < rightArray.count) {
if ([leftArray[i] integerValue] < [rightArray[j] integerValue]) {
[result addObject:leftArray[i]];
i++;
} else {
[result addObject:rightArray[j]];
j++;
}
}
while (i < leftArray.count) {
[result addObject:leftArray[i]];
i++;
}
while (j < rightArray.count) {
[result addObject:rightArray[j]];
j++;
}
return result;
}
// 归并排序
- (NSArray *)mergeSort:(NSArray *)array {
if (array.count <= 1) {
return array;
}
NSInteger mid = array.count / 2;
NSRange leftRange = NSMakeRange(0, mid);
NSRange rightRange = NSMakeRange(mid, array.count - mid);
NSArray *leftArray = [array subarrayWithRange:leftRange];
NSArray *rightArray = [array subarrayWithRange:rightRange];
NSArray *sortedLeftArray = [self mergeSort:leftArray];
NSArray *sortedRightArray = [self mergeSort:rightArray];
return [self mergeArray:sortedLeftArray rightArray:sortedRightArray];
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *unsortedArray = @[@6, @2, @8, @1, @5];
NSArray *sortedArray = [[self new] mergeSort:unsortedArray];
NSLog(@"Sorted Array: %@", sortedArray);
}
return 0;
}
```
在上述代码中,我们定义了两个方法:`mergeArray:` 用于合并两个有序数组,`mergeSort:` 用于实现归并排序。`mergeArray:` 方法通过比较左右两个数组的元素大小,逐步将较小的元素添加到结果数组中。`mergeSort:` 方法首先判断数组长度是否小于等于1,如果是,则直接返回该数组;否则,将数组分成两个部分并递归调用 `mergeSort:` 方法进行排序,最后通过调用 `mergeArray:` 方法将两个有序数组合并为一个有序数组。
在 `main` 函数中,我们创建一个未排序的数组,并使用 `mergeSort:` 方法对其进行排序,最后打印排序后的结果。
运行上述代码,将会输出:Sorted Array: (1, 2, 5, 6, 8),表示经过归并排序后的结果。
希望以上代码能够帮助你理解如何使用 Objective-C 实现归并排序。如果还有其他问题,请随时提问。
阅读全文