锁定老帖子 主题:Scala 的快速排序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-13
真的越来越喜欢Scala了,简洁的语法,清新的风格是我对Scala的印象,感觉使用Scala进行编程真的非常的方便,从Scala的设计思想也能得到不少的启发,就比如下面的一个对数字数组快速排序的sort(Array[Int])方法,你以前想到过通过这样的方式实现吗?
sort(Array[Int])方法通过简明的方式完成了传统的快速排序功能: 1、判断参数数组是否为空?如果为空说明排序完成,直接方法参数。 2、如果给定的参数数字不为空,取得数组的中间数。 3、根据中间数对参数数组进行拆分:调用Array的filter(p: A => Boolean)方法对数组进行分区并生成一个新的数组,"xs filter (pivot >)" 生成一个新的数组只包含小于pivot的数字,"xs filter (pivot ==)"里面的数组只包含等于pivot的数组,"xs filter (pivot <)"则包含大于pivot的数字,通过sort方法的迭代,完成了排序过程。 4、通过Array.concat方法合并多个数组,返回排序后的结果就行了。<!--endfragment-->
<!--endfragment--> 这种方式和传统的快速排序方法在时间复杂度和空间复杂度相似,但是代码却大大的简化了,不信你用Java写一个对数字数组快速的排序方法(要自己写,使用Collections.sort(List<T>)方法可不算啊)。 Scala引起了大家的大量关注,一些人拿Scala的缺点和Java的优点进行比较进行批评Scala,"另一些人拿Java缺点和Scala优点进行比较来拥护Scala,然后两队人在论坛上打起了口水仗,因为Scala又不是钞票,当然不能够取悦所有人。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-13
最后修改:2009-08-13
有个小错误
引用 这种方式和传统的快速排序方法在时间复杂度和空间复杂度相似
这么做的空间复杂度要比原先多得多. ![]() 一般的QuickSort的递归实现已经很简单的了 如果一定要说说有什么麻烦的地方那就是它的partition部分 (实际上你简化的也就是那部分) 呵呵 但那个inplace的partition实在很精彩 扔掉不合适 |
|
返回顶楼 | |
发表时间:2009-08-15
我现在力挺Scala,更力挺Scala和Java的混合编程,各取其精华。
|
|
返回顶楼 | |
发表时间:2009-09-01
请问有什么比较好的IDE或者什么编辑器吗?是在不习惯在notepad上写代码。
|
|
返回顶楼 | |
发表时间:2009-09-01
netbeans的scala插件,应该是目前最好用的。
|
|
返回顶楼 | |
发表时间:2009-09-08
scala确实不错
|
|
返回顶楼 | |
发表时间:2009-09-08
最后修改:2009-09-08
……
implicit def Array2ArrayEx [T <% Ordered[T]] (a: Array [T]) = new { def sort = { scala.util.Sorting quickSort a a } } println(Array("hello","123","no").sort.toString) println(Array(123,343,5435,23,3213).sort.toString) |
|
返回顶楼 | |
发表时间:2009-09-08
最后修改:2009-09-08
话说那个 qsort 写法应该是来自 haskell
qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) 在 ruby 看起来就是这样 def sort a return a if a.size <= 1 pivot = a[0] sort(a.select{|x| x < pivot}) + a.select{|x| x == pivot} + sort(a.select{|x| x > pivot}) end |
|
返回顶楼 | |
发表时间:2009-09-09
不过Scala在国内的应用好象没有活跃起来,
|
|
返回顶楼 | |
发表时间:2009-09-16
vwpolo 写道 不过Scala在国内的应用好象没有活跃起来,
本来scala也没出来多久,怎么期待能很火爆呢。 erlang, python这些历史都不比java短, 但是流行程度和java比又是另外一回事了。 |
|
返回顶楼 | |