Skip to content

Commit f3666d2

Browse files
committed
added mergesort.swift
1 parent 28f7cae commit f3666d2

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

Mergesort/Mergesort.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}

0 commit comments

Comments
 (0)