Merge Sort Algorithm in Kotlin
import java.util.*
fun <E: Comparable<E>> Array<E>.sort(): Array<E> {
if (size <= 1) return this
val middle = size / 2
val left = copyOfRange(0, middle)
val right = copyOfRange(middle, size)
return merge(this, left.sort(), right.sort())
}
private fun <E: Comparable<E>> merge(arr: Array<E>, left: Array<E>, right: Array<E>): Array<E> {
val leftArrSize = left.size
val rightArrSize = right.size
var leftArrIndex = 0
var rightArrIndex = 0
var index = 0
while(leftArrIndex < leftArrSize && rightArrIndex < rightArrSize) {
if (left[leftArrIndex] <= right[rightArrIndex]) {
arr[index] = left[leftArrIndex]
leftArrIndex++
} else {
arr[index] = right[rightArrIndex]
rightArrIndex++
}
index++
}
while(leftArrIndex < leftArrSize) {
arr[index] = left[leftArrIndex]
leftArrIndex++
index++
}
while(rightArrIndex < rightArrSize) {
arr[index] = right[rightArrIndex]
rightArrIndex++
index++
}
return arr
}
fun main(args: Array<String>) {
val nums = arrayOf(2, 12, 89, 23, 76, 43, 12)
nums.sort()
println(Arrays.toString(nums))
val languages = arrayOf("Kotlin", "Java", "C#", "R", "Python", "Scala", "Groovy", "C", "C++")
val sortedLanguages = languages.sort()
println(Arrays.toString(languages))
}
Output:
[2, 12, 12, 23, 43, 76, 89]
[C, C#, C++, Groovy, Java, Kotlin, Python, R, Scala]
