Skip to content

Commit 0d17a67

Browse files
committed
Code Refactoring
Modifying the merge method in Merge Sort: * empty array definition. * unifying the while loop.
1 parent df5adbb commit 0d17a67

File tree

2 files changed

+28
-40
lines changed

2 files changed

+28
-40
lines changed

Merge Sort/MergeSort.playground/Contents.swift

+10-17
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,24 @@ func merge<T: Comparable>(leftPile: [T], rightPile: [T]) -> [T] {
2121
orderedPile.reserveCapacity(leftPile.count + rightPile.count)
2222
}
2323

24-
while leftIndex < leftPile.count && rightIndex < rightPile.count {
24+
while true {
25+
guard leftIndex < leftPile.endIndex else {
26+
orderedPile.append(contentsOf: rightPile[rightIndex..<rightPile.endIndex])
27+
break
28+
}
29+
guard rightIndex < rightPile.endIndex else {
30+
orderedPile.append(contentsOf: leftPile[leftIndex..<leftPile.endIndex])
31+
break
32+
}
33+
2534
if leftPile[leftIndex] < rightPile[rightIndex] {
2635
orderedPile.append(leftPile[leftIndex])
2736
leftIndex += 1
28-
} else if leftPile[leftIndex] > rightPile[rightIndex] {
29-
orderedPile.append(rightPile[rightIndex])
30-
rightIndex += 1
3137
} else {
32-
orderedPile.append(leftPile[leftIndex])
33-
leftIndex += 1
3438
orderedPile.append(rightPile[rightIndex])
3539
rightIndex += 1
3640
}
3741
}
38-
39-
while leftIndex < leftPile.count {
40-
orderedPile.append(leftPile[leftIndex])
41-
leftIndex += 1
42-
}
43-
44-
while rightIndex < rightPile.count {
45-
orderedPile.append(rightPile[rightIndex])
46-
rightIndex += 1
47-
}
48-
4942
return orderedPile
5043
}
5144

Merge Sort/MergeSort.swift

+18-23
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,30 @@ func mergeSort<T: Comparable>(_ array: [T]) -> [T] {
1717
func merge<T: Comparable>(leftPile: [T], rightPile: [T]) -> [T] {
1818
var leftIndex = 0
1919
var rightIndex = 0
20-
var orderedPile = [T]()
20+
var orderedPile: [T] = []
2121
if orderedPile.capacity < leftPile.count + rightPile.count {
2222
orderedPile.reserveCapacity(leftPile.count + rightPile.count)
2323
}
2424

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+
}
4342
}
4443

45-
while rightIndex < rightPile.count {
46-
orderedPile.append(rightPile[rightIndex])
47-
rightIndex += 1
48-
}
4944

5045
return orderedPile
5146
}

0 commit comments

Comments
 (0)