2016-05-03 78 views
0

我是Scala的新用戶,正在嘗試選擇排序算法。我設法做了一個最小排序,但是當我嘗試做最大排序時,我得到一個排序數組,但是按降序排列。我的代碼是:選擇輸入Scala

def maxSort(a:Array[Double]):Unit = { 
    for(i <- 0 until a.length-1){ 
      var min = i 
        for(j <- i + 1 until a.length){ 
          if (a(j) < a(min)) min = j 
      } 
    val tmp = a(i) 
    a(i) = a(min) 
    a(min) = tmp 
    } 
} 

我知道我必須追加我的結果在數組的末尾,但我該怎麼做呢?

回答

2

此代碼將採用最大遞增的順序排序的數組:

def maxSort(a:Array[Double]):Unit = { 
    for (i <- (0 until a.length).reverse) { 
    var max = i 
    for (j <- (0 until i).reverse) { 
     if (a(j) > a(max)) max = j 
    } 
    val tmp = a(i) 
    a(i) = a(max) 
    a(max) = tmp 
    } 
} 

這裏的主要問題是通過相反的順序循環訪問數組,這裏提供更多的解決方案: Scala downwards or decreasing for loop?

請注意,Scala因其功能特性而受到稱讚,功能性方法可能更有趣,並且「以語言風格」。下面是選擇排序的一些例子:

Selection sort in functional Scala

+0

謝謝你的答案和參考。 – StarLord