Skip to content

Instantly share code, notes, and snippets.

@joshskeen
Last active February 1, 2018 11:16
Show Gist options
  • Save joshskeen/64dfec20c97491a20fa2d4ee13c891aa to your computer and use it in GitHub Desktop.
Save joshskeen/64dfec20c97491a20fa2d4ee13c891aa to your computer and use it in GitHub Desktop.
/**
mergesort - following algorithms illuminated
joshskeen
**/
fun main(args: Array<String>) {
val listOf = listOf(1, 11, 8, 2, 3, 7, 8, 9, 3)
println(mergesort(listOf))
}
fun mergesort(list: List<Int>): List<Int> {
if (list.size <= 1) {
return list //already sorted!
}
val midpoint = list.size / 2
val left = mergesort(list.subList(0, midpoint))
val right = mergesort(list.subList(midpoint, list.size))
return merge(left, right)
}
fun merge(leftList: List<Int>, rightList: List<Int>): List<Int> {
var leftIndex = 0
var rightIndex = 0
val out = mutableListOf<Int>()
while (leftIndex < leftList.size && rightIndex < rightList.size) {
val left = leftList[leftIndex]
val right = rightList[rightIndex]
if (left <= right) {
out.add(left)
leftIndex++
} else {
out.add(right)
rightIndex++
}
}
(leftIndex until leftList.size).forEach {
out.add(leftList[it])
}
(rightIndex until rightList.size).forEach {
out.add(rightList[it])
}
return out
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment