-
Notifications
You must be signed in to change notification settings - Fork 88
/
Copy pathMergeSort.kt
40 lines (33 loc) · 1.05 KB
/
MergeSort.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* Created by gazollajunior on 09/04/16.
*/
fun <T:Comparable<T>>mergesort(items:MutableList<T>):MutableList<T>{
if (items.isEmpty()){
return items
}
fun merge(left:MutableList<T>, right:MutableList<T>):MutableList<T>{
var merged: MutableList<T> = arrayListOf<T>()
while(!left.isEmpty() && !right.isEmpty()){
val temp:T
if (left.first() < right.first()) {
temp = left.removeAt(0)
} else {
temp = right.removeAt(0)
}
merged.add(temp)
}
if (!left.isEmpty()) merged.addAll(left)
if (!right.isEmpty()) merged.addAll(right)
return merged
}
val pivot = items.count()/2
var left = mergesort(items.subList(0, pivot))
var right = mergesort(items.subList(pivot, items.count()-1))
return merge(left, right)
}
fun main(args: Array<String>) {
val names = mutableListOf("John", "Tim", "Zack", "Daniel", "Adam")
println(names)
var ordered = mergesort(names)
println(ordered)
}