@@ -17,35 +17,30 @@ func mergeSort<T: Comparable>(_ array: [T]) -> [T] {
17
17
func merge< T: Comparable > ( leftPile: [ T ] , rightPile: [ T ] ) -> [ T ] {
18
18
var leftIndex = 0
19
19
var rightIndex = 0
20
- var orderedPile = [ T ] ( )
20
+ var orderedPile : [ T ] = [ ]
21
21
if orderedPile. capacity < leftPile. count + rightPile. count {
22
22
orderedPile. reserveCapacity ( leftPile. count + rightPile. count)
23
23
}
24
24
25
- while leftIndex < leftPile. count && rightIndex < rightPile. count {
26
- if leftPile [ leftIndex] < rightPile [ rightIndex] {
27
- orderedPile. append ( leftPile [ leftIndex] )
28
- leftIndex += 1
29
- } else if leftPile [ leftIndex] > rightPile [ rightIndex] {
30
- orderedPile. append ( rightPile [ rightIndex] )
31
- rightIndex += 1
32
- } else {
33
- orderedPile. append ( leftPile [ leftIndex] )
34
- leftIndex += 1
35
- orderedPile. append ( rightPile [ rightIndex] )
36
- rightIndex += 1
37
- }
38
- }
39
-
40
- while leftIndex < leftPile. count {
41
- orderedPile. append ( leftPile [ leftIndex] )
42
- leftIndex += 1
25
+ while true {
26
+ guard leftIndex < leftPile. endIndex else {
27
+ orderedPile. append ( contentsOf: rightPile [ rightIndex..< rightPile. endIndex] )
28
+ break
29
+ }
30
+ guard rightIndex < rightPile. endIndex else {
31
+ orderedPile. append ( contentsOf: leftPile [ leftIndex..< leftPile. endIndex] )
32
+ break
33
+ }
34
+
35
+ if leftPile [ leftIndex] < rightPile [ rightIndex] {
36
+ orderedPile. append ( leftPile [ leftIndex] )
37
+ leftIndex += 1
38
+ } else {
39
+ orderedPile. append ( rightPile [ rightIndex] )
40
+ rightIndex += 1
41
+ }
43
42
}
44
43
45
- while rightIndex < rightPile. count {
46
- orderedPile. append ( rightPile [ rightIndex] )
47
- rightIndex += 1
48
- }
49
44
50
45
return orderedPile
51
46
}
0 commit comments