真的是越來越喜歡Scala了,簡潔的語法,清新的風格是我對Scala的印象,感覺使用Scala進行編程真的非常的方便,從Scala的設計思想也能得到不少的啟發,就比如下面的一個對數字數組快速排序的sort(Array[Int])方法,你以前想到過通過這樣的方式實現嗎?
/**
* 快速排序的例子2
* @author VWPOLO
* <p>2009-8-12</p>
*/
object TestQuickSort2 {
def main(args : Array[String]) : Unit = {
var arrays = Array(123,343,5435,23,3213);
Console.println("排序前的結果");
arrays.foreach((array: Int ) => println(array))
arrays = sort(arrays);
Console.println("排序后的結果");
arrays.foreach((array: Int ) => println(array))
}
def sort(xs: Array[Int]):Array[Int] = {
if(xs.length <= 1)
xs;
else {
val pivot = xs(xs.length /2);
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <))
)
}
}
}
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方法合并多個數組,返回排序后的結果就行了。
sort方法指定了返回值但是方法塊中沒有"return" 語言,其實加不加都無所謂,Scala編譯器可以自動進行判斷。
這種方式和傳統的快速排序方法在時間復雜度和空間復雜度相似,但是代碼卻大大的簡化了,不信你用Java寫一個對數字數組快速的排序方法(要自己寫,使用Collections.sort(List<T>)方法可不算啊)。
Scala引起了大家的大量關注,一些人拿Scala的缺點和Java的優點進行比較進行批評Scala,"另一些人拿Java缺點和Scala優點進行比較來擁護Scala,然后兩隊人在論壇上打起了口水仗,Scala又不是鈔票,當然不能夠取悅所有人。
參考資料:Scala By Example