1
//
C語言實現
2
3
void
mergeSort(
int
array[],
int
first,
int
last)
4
{
5
if
(first < last)
//
拆分數列中元素只剩下兩個的時候,不再拆分
6
{
7
int
mid = (first + last) /
2
;
8
//
遞歸拆分數組
9
mergeSort(array, first, mid);
10
mergeSort(array, mid +
1
, last);
11
//
歸并兩個數組
12
merge(array, first, mid, last);
13
}
14
}
15
16
void
merge(
int
array[],
int
first,
int
mid,
int
last)
17
{
18
int
i = first, j = mid +
1
, k =
first;
19
int
temp[last +
1
];
20
21
//
從兩個數列的第一個開始判斷
22
while
(i <= mid && j <=
last)
23
if
(array[i] <=
array[j])
24
temp[k ++] = array[i ++
];
25
else
26
temp[k ++] = array[j ++
];
27
28
//
如果有剩余,補充進入數組
29
while
(i <=
mid)
30
temp[k ++] = array[i ++
];
31
while
(j <=
last)
32
temp[k ++] = array[j ++
];
33
34
//
復制數組
35
while
(first <=
last)
36
{
37
array[first] =
temp[first];
38
first ++
;
39
}
40
}
1
//
Objective-C實現
2
//
通過NSMutableArray的Category實現
3
4
//
.h文件
5
@interface
NSMutableArray (ArraySort)
6
7
- (
void
)mergeSort;
8
9
@end
10
11
//
.m文件
12
13
#import
"
NSMutableArray+ArraySort.h
"
14
15
@implementation
NSMutableArray (ArraySort)
16
17
- (
void
)mergeSort
18
{
19
[self sortByStartIndex:
0
endIndex:self.count -
1
];
20
}
21
22
- (
void
)sortByStartIndex:(
int
)start endIndex:(
int
)end
23
{
24
if
(start <
end)
25
{
26
int
mid = (start + end) /
2
;
27
[self sortByStartIndex:start endIndex:mid];
28
[self sortByStartIndex:mid +
1
endIndex:end];
29
[self mergeByStartIndex:start midIndex:mid endIndex:end];
30
}
31
}
32
33
- (
void
)mergeByStartIndex:(
int
)start midIndex:(
int
)mid endIndex:(
int
)end
34
{
35
int
i = start,j = mid +
1
;
36
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:end +
1
];
37
38
while
(i <= mid && j <=
end)
39
if
([[self objectAtIndex:i] integerValue] <=
[[self objectAtIndex:j] integerValue])
40
[tempArray addObject:[self objectAtIndex:i ++
]];
41
else
42
[tempArray addObject:[self objectAtIndex:j ++
]];
43
44
while
(i <=
mid)
45
[tempArray addObject:[self objectAtIndex:i ++
]];
46
while
(j <=
end)
47
[tempArray addObject:[self objectAtIndex:j ++
]];
48
49
for
(
id
object
in
tempArray)
50
[self replaceObjectAtIndex:start++ withObject:
object
];
51
}
52
53
@end
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

