Using other languages’ implementation methods for reference, combining with kotlin’s features and syntactic sugar, a kotlin’s characteristic merge sort algorithm is produced. If you have any questions about grammar, you can ask me.

fun sort(array: IntArray, start: Int = 0, end: Int = array.size - 1) { if (start >= end) return println("sort start = $start, end = $end") if ((end - start + 1) ! Val mid = (start + end) // sort(array, start, mid) sort(array, mid + 1, end) merge(array, Start, mid, end)} else { If (array[start] > array[end]) {array[start] = array[end]. Also {array[end] = array[start]}}}} // Merge array fun merge(array: IntArray, start: Int, mid: Int, end: Int) { println("merge start = $start, mid = $mid, end = $end") for (i in start.. end) { println("merge enter array[$i] = ${array[i]}") } val t1 = array.takeRange(start, mid) // println("t1") // t1.forEach(::println) val t2 = array.takeRange(mid + 1, end) // println("t2") // t2.forEach(::println) var index1 = 0 var index2 = 0 var arrayIndex = start while (index1 ! = t1.size && index2 ! = t2.size) { if (t1[index1] >= t2[index2]) { println("merge while t1[index1] >= t2[index2], t1[${index1}] = ${t1[index1]}, t2[${index2}] = ${t2[index2]}") array[arrayIndex++] = t2[index2++] } else { println("merge while t1[index1] < t2[index2], t1[${index1}] = ${t1[index1]}, T2 [${index2}] = ${t2[index2]}") array[arrayIndex++] = t1[index1++]}} {array[arrayIndex] = Max (t1[t1.size-1], t2[t2.size-1])} // Merge if (index1! = t1.size - 1) { for (i in index1 until t1.size) { array[arrayIndex++] = t1[i] } } if (index2 ! = t2.size - 1) { for (i in index2 until t2.size) { array[arrayIndex++] = t2[i] } } for (i in start.. End) {println("merge out array[$I] = ${array[I]}")}} fun intarray. takeRange(start: Int, end: Int): IntArray { val size = end - start + 1 val res = IntArray(size) for (i in 0 until size) { res[i] = this[i + start] } return res } fun main() { val arr = intArrayOf(35, 24, 61, 232, 48, 79, 121, 29, 69, 49) sort(arr) arr.forEach(::println) }Copy the code

Please indicate the source of reprint