forked from Shipu/Algorithm-Implementations
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergeSort.m
More file actions
45 lines (40 loc) · 1.2 KB
/
Copy pathMergeSort.m
File metadata and controls
45 lines (40 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//
// MergeSort.m
// Playground
//
// Created by Greg Price on 8/9/15.
// Copyright (c) 2015 Gregory Price. All rights reserved.
//
#import "MergeSort.h"
@implementation MergeSort
+ (NSMutableArray *)execute:(NSMutableArray *)numbers
start:(NSInteger)start
end:(NSInteger)end {
if (start < end) {
long middle = (start + end) / 2;
numbers = [self execute:numbers start:start end:middle];
numbers = [self execute:numbers start:middle + 1 end:end];
numbers = merge(numbers, (int)start, (int)middle, (int)end);
}
return numbers;
}
NSMutableArray *merge(NSMutableArray *list, int start, int middle, int end) {
int reverseNavigator = middle - 1;
while (reverseNavigator >= 0) {
int trailer = reverseNavigator;
int forwardNavigator = trailer + 1;
for (int i = forwardNavigator; i < end; i++) {
if (list[trailer] < list[i]) {
id temp = list[trailer];
list[trailer] = list[i];
list[i] = temp;
trailer++;
} else {
break;
}
}
reverseNavigator--;
}
return list;
}
@end