File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ //
2
+ // Mergesort.swift
3
+ //
4
+ //
5
+ // Created by Kelvin Lau on 2016-02-03.
6
+ //
7
+ //
8
+
9
+ func mergeSort( array: [ Int ] ) -> [ Int ] {
10
+ guard array. count > 1 else { return array } // 1
11
+ let middleIndex = array. count / 2 // 2
12
+
13
+ let leftArray = mergeSort ( Array ( array [ 0 ..< middleIndex] ) ) // 3
14
+
15
+ let rightArray = mergeSort ( Array ( array [ middleIndex..< array. count] ) ) // 4
16
+
17
+ return merge ( leftPile: leftArray, rightPile: rightArray) // 5
18
+ }
19
+
20
+ func merge( leftPile leftPile: [ Int ] , rightPile: [ Int ] ) -> [ Int ] {
21
+ // 1
22
+ var leftIndex = 0
23
+ var rightIndex = 0
24
+
25
+ // 2
26
+ var orderedPile = [ Int] ( )
27
+
28
+ // 3
29
+ while leftIndex < leftPile. count && rightIndex < rightPile. count {
30
+ if leftPile [ leftIndex] < rightPile [ rightIndex] {
31
+ orderedPile. append ( leftPile [ leftIndex] )
32
+ leftIndex += 1
33
+ } else if leftPile [ leftIndex] > rightPile [ rightIndex] {
34
+ orderedPile. append ( rightPile [ rightIndex] )
35
+ rightIndex += 1
36
+ } else {
37
+ orderedPile. append ( leftPile [ leftIndex] )
38
+ leftIndex += 1
39
+ orderedPile. append ( rightPile [ rightIndex] )
40
+ rightIndex += 1
41
+ }
42
+ }
43
+
44
+ // 4
45
+ while leftIndex < leftPile. count {
46
+ orderedPile. append ( leftPile [ leftIndex] )
47
+ leftIndex += 1
48
+ }
49
+
50
+ while rightIndex < rightPile. count {
51
+ orderedPile. append ( rightPile [ rightIndex] )
52
+ rightIndex += 1
53
+ }
54
+
55
+ return orderedPile
56
+ }
You can’t perform that action at this time.
0 commit comments