<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

       真的是越來越喜歡Scala了,簡潔的語法,清新的風(fēng)格是我對Scala的印象,感覺使用Scala進(jìn)行編程真的非常的方便,從Scala的設(shè)計思想也能得到不少的啟發(fā),就比如下面的一個對數(shù)字?jǐn)?shù)組快速排序的sort(Array[Int])方法,你以前想到過通過這樣的方式實現(xiàn)嗎?

    /**
     * 快速排序的例子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(
    "排序前的結(jié)果");
        arrays.foreach((array: Int ) 
    => println(array))
        arrays 
    = sort(arrays);
        Console.println(
    "排序后的結(jié)果");
        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])方法通過簡明的方式完成了傳統(tǒng)的快速排序功能:

          1、判斷參數(shù)數(shù)組是否為空?如果為空說明排序完成,直接方法參數(shù)。

          2、如果給定的參數(shù)數(shù)字不為空,取得數(shù)組的中間數(shù)。

          3、根據(jù)中間數(shù)對參數(shù)數(shù)組進(jìn)行拆分,通過調(diào)用Arrayfilter(pA => Boolean)方法對數(shù)組進(jìn)行分區(qū)并生成一個新的數(shù)組,"xs filter (pivot >)生成一個新的數(shù)組只包含小于pivot的數(shù)字,"xs filter (pivot ==)"里面的數(shù)組只包含等于pivot的數(shù)組,"xs filter (pivot <)"則包含大于pivot的數(shù)字,通過sort方法的迭代,完成了排序過程。

          4、通過Array.concat方法合并多個數(shù)組,返回排序后的結(jié)果就行了


        sort方法指定了返回值但是方法塊中沒有"return" 語言,其實加不加都無所謂,Scala編譯器可以自動進(jìn)行判斷。

        這種方式和傳統(tǒng)的快速排序方法在時間復(fù)雜度和空間復(fù)雜度相似,但是代碼卻大大的簡化了,不信你用Java寫一個對數(shù)字?jǐn)?shù)組快速的排序方法(要自己寫,使用Collections.sort(List<T>)方法可不算啊)。

        Scala引起了大家的大量關(guān)注,一些人拿Scala的缺點和Java的優(yōu)點進(jìn)行比較進(jìn)行批評Scala"另一些人拿Java缺點和Scala優(yōu)點進(jìn)行比較來擁護(hù)Scala,然后兩隊人在論壇上打起了口水仗,Scala又不是鈔票,當(dāng)然不能夠取悅所有人。


        參考資料:Scala By Example
     

    posted on 2009-08-13 09:02 VWPOLO 閱讀(1599) 評論(6)  編輯  收藏 所屬分類: Java 技術(shù)

    Feedback

    # re: Scala 的快速排序 2009-08-13 10:19 Johnny Jian
    Console.println("排序前的結(jié)果");
    arrays.foreach((array: Int ) => println(array))

    =>

    println("排序前的結(jié)果")
    arrays.foreach(println)  回復(fù)  更多評論
      

    # re: Scala 的快速排序 2009-08-13 10:23 VWPOLO
    @Johnny Jian
    不錯,這樣更簡潔!  回復(fù)  更多評論
      

    # re: Scala 的快速排序[未登錄] 2009-08-13 11:20 dennis
    這里并不是scala的優(yōu)雅,而是遞歸的優(yōu)雅。scala的語法談不上優(yōu)美,反而是晦澀。  回復(fù)  更多評論
      

    # re: Scala 的快速排序 2009-08-14 00:40 Net4J
    不還覺得Groovy的順眼.  回復(fù)  更多評論
      

    # re: Scala 的快速排序 2009-08-14 22:44 Johnny Jian
    @Net4J
    贊成
    同樣的程序用Groovy寫:
    def sort(xs) {
    if (xs.size() <= 1)
    xs
    else {
    def pivot = xs[xs.size() / 2 as int]
    sort(xs.findAll { it < pivot }) +
    xs.findAll { it == pivot } +
    sort(xs.findAll { it > pivot })
    }
    }
    def array = [123, 343, 5435, 23, 3213]
    println array
    array = sort(array)
    println array

    或者用groupBy方法:
    def sort(xs) {
    if (!xs)
    []
    else {
    def pivot = xs[xs.size() / 2 as int]
    def m = xs.groupBy { it <=> pivot }
    sort(m[-1]) + m[0] + sort(m[1])
    }
    }
    def array = [123, 343, 5435, 23, 3213]
    println array
    array = sort(array)
    println array  回復(fù)  更多評論
      

    # re: Scala 的快速排序 2009-08-15 09:53 VWPOLO
    @Johnny Jian
    只能說蘿卜白菜,各有所愛了  回復(fù)  更多評論
      

    主站蜘蛛池模板: 青青青青青青久久久免费观看 | 亚洲乱码无人区卡1卡2卡3| 亚洲av产在线精品亚洲第一站| 在线观看日本亚洲一区| 羞羞视频在线免费观看| 成人无码区免费A∨直播| 亚洲免费视频网站| 一二三四视频在线观看中文版免费| 在线播放免费人成视频在线观看| 国产一级特黄高清免费大片| 在线亚洲精品自拍| 亚洲精品日韩中文字幕久久久| 亚洲人成无码网站在线观看| 一级黄色片免费观看| 性无码免费一区二区三区在线| 好先生在线观看免费播放| 日本不卡高清中文字幕免费| 亚洲色无码专区在线观看| 亚洲黄色一级毛片| 精品在线视频免费| 国产一级片免费看| 拨牐拨牐x8免费| 亚洲人AV永久一区二区三区久久| 中文字幕在线观看亚洲| 国产尤物在线视精品在亚洲| 日韩免费的视频在线观看香蕉| 免费毛片在线播放| 亚洲精品无码专区久久久| 亚洲AV无码乱码麻豆精品国产| 一个人免费观看视频在线中文| 亚洲一区二区免费视频| 亚洲日韩人妻第一页| 亚洲黄色三级网站| 一级做a爱过程免费视| 日本h在线精品免费观看| 亚洲成aⅴ人片久青草影院| 亚洲精品国产成人| 草久免费在线观看网站| 国产日本一线在线观看免费| 亚洲午夜福利精品无码| 亚洲精品伊人久久久久 |