@student2018
2018-10-19T03:04:13.000000Z
字数 1136
阅读 692
Scala
基本思想:经过一趟排序,把待排对象分成两个独立的部分,一部分的数据大(小)于另一部分,同理,对子对象进行如此处理,以达到所有数据都有序。
package student.scalaobject Sort extends App {def quicksort[T <% Ordered[T]](xs:List[T]):List[T] = {if(xs.length <= 1 ) xselse {quicksort ( xs filter (xs(0) >) ) :::(xs filter (xs(0) ==) ) :::quicksort ( xs filter (xs(0) <) )}}val rand = scala.util.Randomval oriData = for(i <- 1 to 100) yield rand.nextInt(1000)oriData map (_ + " ") foreach printprintlnquicksort(oriData.toList) map ( _ + " ") foreach print}
下面是优化版的快排,可以接受更多的类型进行排序,而且返回值与传入值对应。
package student.scalaimport scala.collection.SeqLikeimport scala.collection.generic.CanBuildFromobject Sort extends App {def quicksort[T <% Ordered[T]](xs: List[T]): List[T] = {if (xs.length <= 1) xselse {quicksort(xs filter (xs(0) >)) :::(xs filter (xs(0) ==)) :::quicksort(xs filter (xs(0) <))}}def sort[T, Coll](xs: Coll)(implicitev0: Coll <:< SeqLike[T, Coll],n: Ordering[T],cbf: CanBuildFrom[Coll, T, Coll]): Coll = {if (xs.length < 2) xselse {import n._val b = cbf()val pivot = xs.headb ++= sort(xs filter (pivot >))b ++= xs filter (pivot ==)b ++= sort(xs filter (pivot <))b.result}}val rand = scala.util.Randomval list = for (i <- 1 to 10) yield rand.nextInt(100)val oriData = listoriData map (_ + " ") foreach printprintlnsort(oriData) map (_ + " ") foreach print}