fun merge(array: MutableList<Int>, left: Int, right: Int, division: Int) {
val mergedLength = right - left
val merged = Array<Int>(mergedLength){0}
var index1 = left
var index2 = division
for(i in 0 until mergedLength) {
if(index1 >= division) {
merged[i] = array[index2]
index2++
} else if(index2 >= right) {
merged[i] = array[index1]
index1++
} else if(array[index1] <= array[index2]) {
merged[i] = array[index1]
index1++
} else {
merged[i] = array[index2]
index2++
}
}
for(i in left until right) {
array[i] = merged[i - left]
}
}
fun mergeSort(array: MutableList<Int>, left: Int, right: Int) {
if(right - left <= 1) {
return;
}
val division = (left + right) / 2
mergeSort(array, left, division)
mergeSort(array, division, right)
merge(array, left, right, division)
}
fun main() {
val array = mutableListOf(7, 3, 0, 1, 5, 2, 5, 19, 10, 5)
mergeSort(array, 0, array.count())
println(array)
}
ZnVuIG1lcmdlKGFycmF5OiBNdXRhYmxlTGlzdDxJbnQ+LCBsZWZ0OiBJbnQsIHJpZ2h0OiBJbnQsIGRpdmlzaW9uOiBJbnQpIHsKICAgIHZhbCBtZXJnZWRMZW5ndGggPSByaWdodCAtIGxlZnQKICAgIHZhbCBtZXJnZWQgPSBBcnJheTxJbnQ+KG1lcmdlZExlbmd0aCl7MH0KICAgIHZhciBpbmRleDEgPSBsZWZ0CiAgICB2YXIgaW5kZXgyID0gZGl2aXNpb24KCiAgICBmb3IoaSBpbiAwIHVudGlsIG1lcmdlZExlbmd0aCkgewogICAgICAgIGlmKGluZGV4MSA+PSBkaXZpc2lvbikgewogICAgICAgICAgICBtZXJnZWRbaV0gPSBhcnJheVtpbmRleDJdCiAgICAgICAgICAgIGluZGV4MisrCiAgICAgICAgfSBlbHNlIGlmKGluZGV4MiA+PSByaWdodCkgewogICAgICAgICAgICBtZXJnZWRbaV0gPSBhcnJheVtpbmRleDFdCiAgICAgICAgICAgIGluZGV4MSsrCiAgICAgICAgfSBlbHNlIGlmKGFycmF5W2luZGV4MV0gPD0gYXJyYXlbaW5kZXgyXSkgewogICAgICAgICAgICBtZXJnZWRbaV0gPSBhcnJheVtpbmRleDFdCiAgICAgICAgICAgIGluZGV4MSsrCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVyZ2VkW2ldID0gYXJyYXlbaW5kZXgyXQogICAgICAgICAgICBpbmRleDIrKwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaSBpbiBsZWZ0IHVudGlsIHJpZ2h0KSB7CiAgICAgICAgYXJyYXlbaV0gPSBtZXJnZWRbaSAtIGxlZnRdCiAgICB9Cn0KCmZ1biBtZXJnZVNvcnQoYXJyYXk6IE11dGFibGVMaXN0PEludD4sIGxlZnQ6IEludCwgcmlnaHQ6IEludCkgewogICAgaWYocmlnaHQgLSBsZWZ0IDw9IDEpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdmFsIGRpdmlzaW9uID0gKGxlZnQgKyByaWdodCkgLyAyCiAgICBtZXJnZVNvcnQoYXJyYXksIGxlZnQsIGRpdmlzaW9uKQogICAgbWVyZ2VTb3J0KGFycmF5LCBkaXZpc2lvbiwgcmlnaHQpCgogICAgbWVyZ2UoYXJyYXksIGxlZnQsIHJpZ2h0LCBkaXZpc2lvbikKfQoKZnVuIG1haW4oKSB7CiAgICB2YWwgYXJyYXkgPSBtdXRhYmxlTGlzdE9mKDcsIDMsIDAsIDEsIDUsIDIsIDUsIDE5LCAxMCwgNSkKCiAgICBtZXJnZVNvcnQoYXJyYXksIDAsIGFycmF5LmNvdW50KCkpCgogICAgcHJpbnRsbihhcnJheSkKfQ==