zoukankan      html  css  js  c++  java
  • Scala快速排序

    Scala 快排

    Scala


    基本思想:经过一趟排序,把待排对象分成两个独立的部分,一部分的数据大(小)于另一部分,同理,对子对象进行如此处理,以达到所有数据都有序。

     

    package student.scala
    
    object Sort extends App {
      
       
      def quicksort[T <% Ordered[T]](xs:List[T]):List[T] = {
        if(xs.length <= 1 ) xs
        else {
               quicksort ( xs filter (xs(0) >) ) :::
                         (xs filter (xs(0) ==) ) :::
               quicksort ( xs filter (xs(0) <) )
        }
      }
      
      val rand = scala.util.Random
      
      val oriData = for(i <- 1 to 100) yield rand.nextInt(1000)
      
      oriData map (_ + " ") foreach  print 
      println
      quicksort(oriData.toList) map ( _ + " ") foreach print
      
      
      
    }

    下面是优化版的快排,可以接受更多的类型进行排序,而且返回值与传入值对应。

    package student.scala
    
    import scala.collection.SeqLike
    import scala.collection.generic.CanBuildFrom
    
    object Sort extends App {
    
      def quicksort[T <% Ordered[T]](xs: List[T]): List[T] = {
    
        if (xs.length <= 1) xs
        else {
          quicksort(xs filter (xs(0) >)) :::
            (xs filter (xs(0) ==)) :::
            quicksort(xs filter (xs(0) <))
        }
      }
    
      def sort[T, Coll](xs: Coll)(implicit
        ev0: Coll <:< SeqLike[T, Coll],
                                  n:   Ordering[T],
                                  cbf: CanBuildFrom[Coll, T, Coll]): Coll = {
        if (xs.length < 2) xs
        else {
          import n._
          val b = cbf()
          val pivot = xs.head
          b ++= sort(xs filter (pivot >))
          b ++= xs filter (pivot ==)
          b ++= sort(xs filter (pivot <))
          b.result
        }
      }
    
      val rand = scala.util.Random
      val list = for (i <- 1 to 10) yield rand.nextInt(100)
    
      val oriData = list
    
      oriData map (_ + " ") foreach print
      println
      sort(oriData) map (_ + " ") foreach print
    
    }

     

  • 相关阅读:
    构建之法阅读笔记02
    第六周总结
    第四周总结
    课堂练习——数据爬取
    【Spring实战4】02---Spring容器
    【Spring实战4】01---初接触
    性能测试总结(三)--工具选型篇
    性能测试总结(二)---测试流程篇
    性能测试总结(一)---基础理论篇
    接口测试总结【转】
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/9815252.html
Copyright © 2011-2022 走看看