2016-09-27 35 views
0

我想编写一些mergesort函数。通过隐式Ordering [Int]参数到Ordering [T]参数

如何供应订购[T]合并子功能?

申请的整体结构如下:

object Main extends App { 
    ... 
    val array: Array[Int] = string.split(' ').map(_.toInt) 

    def mergesort[T](seq: IndexedSeq[T]): IndexedSeq[T] = { 
    def mergesortWithIndexes(seq: IndexedSeq[T], 
          startIdx: Int, endIdx: Int): IndexedSeq[T] = { 
     import Helpers.append 
     val seqLength = endIdx - startIdx 
     val splitLength = seq.length/2 

     val (xs, ys) = seq.splitAt(splitLength) 
     val sortXs = mergesortWithIndexes(xs, startIdx, startIdx + seqLength) 
     val sortYs = mergesortWithIndexes(ys, startIdx + seqLength, endIdx) 


     def merge(sortXs: IndexedSeq[T], sortYs: IndexedSeq[T], 
       writeFun: Iterable[CharSequence] => Path)(ord: math.Ordering[T]): IndexedSeq[T] = { 
     ... 

     while (firstIndex < firstLength || secondIndex < secondLength) { 
      if (firstIndex == firstLength) 
      buffer ++ sortYs 
      else if (secondIndex == secondLength) 
      buffer ++ sortXs 
      else { 
      if (ord.lteq(minFirst, minSecond)) { 
       ... 
      } else { 
       ... 
      } 
      } 
     } 
     buffer.toIndexedSeq 
     } 

     merge(sortXs, sortYs, append(output)) 
    } 
    mergesortWithIndexes(seq, 0, seq.length) 
    } 

    val outSeq = mergesort(array) 
    Helpers.write(output)(Vector(outSeq.mkString(" "))) 
} 

我想有一般合并()函数的定义,但在应用我使用IndexedSeq [INT]并因此期待通预定义订购[Int]

回答