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
    
    }

     

  • 相关阅读:
    Razor使用方法
    Razor视图中的@:和<text>语法
    【洛谷p1031】均分纸牌
    Python读写文件
    对象传参数中引用是否被覆盖的情形
    Python中的random模块
    mysql数据库 安装 (原创)
    MYSQL常用命令
    MySQL查询数据表中数据记录(包括多表查询)
    127.0.0.1
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/9815252.html
Copyright © 2011-2022 走看看