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
    
    }

     

  • 相关阅读:
    语音信号端点检测
    WEBPACK & BABEL 打包项目
    使用 Qt 获取 UDP 数据并显示成图片(2)
    QSS为Qt程序添加不一样的样式
    window 搜索大文件
    Idea java 编译发生 cannot find symbol
    JetBeans Tab键相关设置
    JetBean Rider 重命名 c# 程序集名
    Unity 导入其他工程
    列出当前文件夹下的以log结尾的文件名
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/9815252.html
Copyright © 2011-2022 走看看