Skip to content

Instantly share code, notes, and snippets.

@arashkashi
Last active August 31, 2017 18:35
Show Gist options
  • Save arashkashi/ca0d887d9f6d4e79dc90ada23e9aeca4 to your computer and use it in GitHub Desktop.
Save arashkashi/ca0d887d9f6d4e79dc90ada23e9aeca4 to your computer and use it in GitHub Desktop.
Merge Sort
public func mergeSort<T: Comparable>(_ A : inout [T]) -> [T] {
if A.count == 2 {
if A[0] > A[1] { return [A[1], A[0]] } else {
return [A[0], A[1]]
}
} else if A.count == 1 {
return [A[0]]
} else {
var tt = Array(A.prefix(upTo: A.count/2))
var yy = Array(A.suffix(from: A.count/2))
let aa = mergeSort(&tt)
let bb = mergeSort(&yy)
return mergeSorted(a: aa, b: bb)
}
}
public func mergeSorted<T: Comparable>(a: [T], b: [T]) -> [T] {
var indexA: Int = 0
var indexB: Int = 0
var finished = false
var result: [T] = []
while finished == false {
if indexA > a.count-1 { b.suffix(from: indexB).map { result.append($0) }; finished = true; break } else
if indexB > b.count-1 { a.suffix(from: indexA).map { result.append($0) }; finished = true; break } else
if a[indexA] < b[indexB] {
result.append(a[indexA])
indexA = indexA + 1
} else {
result.append(b[indexB])
indexB = indexB + 1
}
}
return result
}
var a: [Int] = [3,5,1,10, 3, 6, 22, 55, 33, 22]
mergeSort(&a)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment