|
1 | | -def mergeSort(xs :List[Int]):List[Int] = { |
| 1 | +def mergeSort[T](xs :List[T])(lt: (T, T) =>Boolean):List[T] = { |
2 | 2 | val n = xs.length |
3 | 3 | if(n <= 1) xs |
4 | 4 | else{ |
5 | 5 | val (first, second) = xs.splitAt(n/2) |
6 | | - def merge(xs:List[Int], ys:List[Int]): List[Int] = (xs, ys) match { |
| 6 | + def merge(xs:List[T], ys:List[T]): List[T] = (xs, ys) match { |
7 | 7 | case (Nil, ys) => ys |
8 | 8 | case (xs, Nil) => xs |
9 | 9 | case (x::xs, y::ys) => |
10 | | - if (x <= y) x :: merge(xs,y :: ys) |
| 10 | + if (lt(x, y)) x :: merge(xs,y :: ys) |
11 | 11 | else y :: merge(x::xs, ys) |
12 | 12 | } |
13 | | - merge(mergeSort(first),mergeSort(second)) |
| 13 | + merge(mergeSort(first)(lt),mergeSort(second)(lt)) |
14 | 14 | } |
15 | 15 | } |
16 | | -println(mergeSort(6::5::4::3::2::1::Nil)) |
| 16 | +println(mergeSort(6::5::4::3::2::1::Nil)((a:Int, b:Int)=> a<=b)) |
0 commit comments