Skip to content

Commit ebaaac2

Browse files
authored
Merge pull request kodecocodes#348 from iamsimranjot/master
Generic Functions for Merge Sort (Recursive)
2 parents a0794ba + f1dd6b6 commit ebaaac2

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

Merge Sort/MergeSort.playground/Contents.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
/* Top-down recursive version */
22

3-
func mergeSort(_ array: [Int]) -> [Int] {
3+
func mergeSort<T: Comparable>(_ array: [T]) -> [T] {
44
guard array.count > 1 else { return array }
55
let middleIndex = array.count / 2
66
let leftArray = mergeSort(Array(array[0..<middleIndex]))
77
let rightArray = mergeSort(Array(array[middleIndex..<array.count]))
88
return merge(leftPile: leftArray, rightPile: rightArray)
99
}
1010

11-
func merge(leftPile: [Int], rightPile: [Int]) -> [Int] {
11+
func merge<T: Comparable>(leftPile: [T], rightPile: [T]) -> [T] {
1212
var leftIndex = 0
1313
var rightIndex = 0
14-
var orderedPile = [Int]()
14+
var orderedPile = [T]()
1515

1616
while leftIndex < leftPile.count && rightIndex < rightPile.count {
1717
if leftPile[leftIndex] < rightPile[rightIndex] {
@@ -43,6 +43,8 @@ func merge(leftPile: [Int], rightPile: [Int]) -> [Int] {
4343

4444
let array = [2, 1, 5, 4, 9]
4545
let sortedArray = mergeSort(array)
46+
let array2 = ["Tom", "Harry", "Ron", "Chandler", "Monica"]
47+
let sortedArray2 = mergeSort(array2)
4648

4749

4850

Merge Sort/MergeSort.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
//
77
//
88

9-
func mergeSort(_ array: [Int]) -> [Int] {
9+
func mergeSort<T: Comparable>(_ array: [T]) -> [T] {
1010
guard array.count > 1 else { return array }
1111
let middleIndex = array.count / 2
1212
let leftArray = mergeSort(Array(array[0..<middleIndex]))
1313
let rightArray = mergeSort(Array(array[middleIndex..<array.count]))
1414
return merge(leftPile: leftArray, rightPile: rightArray)
1515
}
1616

17-
func merge(leftPile: [Int], rightPile: [Int]) -> [Int] {
17+
func merge<T: Comparable>(leftPile: [T], rightPile: [T]) -> [T] {
1818
var leftIndex = 0
1919
var rightIndex = 0
20-
var orderedPile = [Int]()
20+
var orderedPile = [T]()
2121

2222
while leftIndex < leftPile.count && rightIndex < rightPile.count {
2323
if leftPile[leftIndex] < rightPile[rightIndex] {

0 commit comments

Comments
 (0)