今天爱分享给大家带来IOS开发算法 归并排序【附代码】,希望能够帮助到大家。
归并排序(MERGE-SORT)是建立在归并澡作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
/**
时间复杂度为O(nlogn)
(1)“分解”——将序列每次折半划分
(2)“合并”——将划分后的序列段两两合并后排序
*/
- (NSArray *)mergeSortArray:(N爆缸utableArray *)array {
// 排序数组
N爆缸utableArray *tempArray = [N爆缸utableArray arrayWithCapacity:1];
// 第一趟排序是的子数组个数为ascendingArr.count
for (NSNumber *num in array) {
N爆缸utableArray *subArray = [N爆缸utableArray array];
[subArray addObject:num];
[tempArray addObject:subArray];
}
/**
分解澡作 每一次归并澡作
当数组个数为偶数时tempArray.count/2; 当数组个数为奇数时tempArray.count/2+1; 当tempArray.count == 1时,归并排序完成
*/
while (tempArray.count != 1) {
NSInteger i = 0;
// 当数组个数为偶数时 进行合并澡作, 当数组个数为奇数时,最后一位轮空
while (i < tempArray.count - 1) {
// 将i 与i+1 进行合并澡作 将合并结果放入i位置上 将i+1位置上的元素删除
tempArray[i] = [self mergeArrayFirstList:tempArray[i] secondList:tempArray[i + 1]];
[tempArray removeObjectAtIndex:i + 1];
// i++ 继续下一循环的合并澡作
i++;
}
}
return tempArray.copy;
}
// 合并
- (NSArray *)mergeArrayFirstList:(NSArray *)array1 secondList:(NSArray *)array2 {
// 合并序列数组
N爆缸utableArray *resultArray = [N爆缸utableArray array];
// firstIndex是第一段序列的下标 secondIndex是第二段序列的下标
NSInteger firstIndex = 0, secondIndex = 0;
// 扫描第一段和第二段序列,直到有一个扫描结束
while (firstIndex < array1.count && secondIndex < array2.count) {
// 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描
if ([array1[firstIndex] floatValue] < [array2[secondIndex] floatValue]) {
[resultArray addObject:array1[firstIndex]];
firstIndex++;
} else {
[resultArray addObject:array2[secondIndex]];
secondIndex++;
}
}
// 若第一段序列还没扫描完,将其全部复制到合并序列
while (firstIndex < array1.count) {
[resultArray addObject:array1[firstIndex]];
firstIndex++;
}
// 若第二段序列还没扫描完,将其全部复制到合并序列
while (secondIndex < array2.count) {
[resultArray addObject:array2[secondIndex]];
secondIndex++;
}
// 返回合并序列数组
return resultArray.copy;
}
原文链接:https://blog.itblood.com/605.html,转载请注明出处。

![异世界情趣用品店V1.2.2 官方中文步兵版[新作][电脑/4.5G]异世界情趣用品店V1.2.2 官方中文步兵版 [经营互动SLG/中文/动态]](/wp-content/uploads/replace/2025/07/19/e66f3a127daa824ab8f032302dede9c5.webp)