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 }
Scala快速排序的更多相关文章
- Scala第一章学习笔记
面向对象编程是一种自顶向下的程序设计方法.用面向对象方法构造软件时,我们将代码以名词(对象)做切割,每个对象有某种形式的表示服(self/this).行为(方法).和状态(成员变量).识别出名词并且定 ...
- Scala极速入门
摘要 当面向对象遇到函数式编程,这就是Scala.简练的语言描述与简单的例子相辅相成,希望能够对大家学习Scala有所帮助. scala 入门 定义 Scala语言是一种面向对象语言,同时又结合了命令 ...
- Scala 实现快速排序和归并排序
def quickSort1(array: Array[Int]): Array[Int] = { def swap(x: Int, y: Int): Unit = { val tmp = array ...
- scala实现快速排序
scala> def qSort(a: List[Int]): List[Int] = { | ) a | else qSort( a.filter(a.head > _ )) ++ | ...
- Scala实现冒泡排序、归并排序和快速排序
1.冒泡排序 def sort(list: List[Int]): List[Int] = list match { case List() => List() case head :: tai ...
- scala实战学习-快速排序
def qSort(a:List[Int]):List[Int]={ if(a.length < 2) a else qSort(a.filter(a.head > _)) ++ a.fi ...
- 【Scala】尾递归优化
以递归方式思考 递归通过灵巧的函数定义,告诉计算机做什么.在函数式编程中,随处可见递归思想的运用.下面给出几个递归函数的例子: object RecursiveExample extends App{ ...
- Scala基础语法
/* 学慕课网上<Scala程序设计>课程跟着敲的代码 作为代码参考也是很好的 在scala_ide.org上下载eclipse IDE,新建一个worksheet,就可以像在xcode的 ...
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
随机推荐
- C++之拷贝构造函数、深拷贝、浅拷贝
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- React-Native 样式指南
https://github.com/doyoe/react-native-stylesheet-guide
- 快学scala习题解答--第五章 类
5 类 5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 class Count{ private var value = Int.MaxValue else v ...
- ionic触摸事件
官方文档:http://ionicframework.com/docs/api/directive/onHold/ on-hold 长按事件on-tap 点击事件 on-double-tap 双击事 ...
- Oracle自定义聚集函数
今天工作中看见别人写的自定义聚集函数,所以一门心思的想搞懂,就在网上找资料了. 自定义聚集函数 自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG ...
- IOS7开发~新UI学起(四)
本文转载至 http://blog.csdn.net/lizhongfu2013/article/details/9166193 1.UITableView: UITableViewDelegate ...
- hdu4123(树形dp+单调队列)
还没有学过RMQ,所以只能用会的单调队列做. Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/3276 ...
- poj 1386
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11312 Accepted: 3862 De ...
- ThreadLocal分析总结:
1.ThreadLocal 是什么 它是一个数据结构,像 HashMap,可保存 "key : value" 键值对:ThreadLocal 有一个内部类ThreadLocalMa ...
- js对用户信息加密传输 java后端解密
1.加密采用服务端随机生成加密因子放入session中,传入登录或注册界面(每次进入都刷新) 2.页面中引入jquery.aes.js(这个js从网上下的坑比较多,引入先后顺序不一致都会报错,所以最后 ...