以下代码是数组排序算法的手动版本,采用任何整数数组,并更改该数组以使其处于非递减顺序。出于某种原因,当我在一个数组上调用这个过程时,我的scala控制台就坐在那里(看似计算的东西),我不知道为什么。
def main(a: Array[Int]) {
var l = a.length
var switchesLeft = true
while( switchesLeft == true) {
var z = 0
var i = 0;
while( i < l ) {
var x = i + 1
if( x == l ) x = 0
if( a(i) > a(x) ) {
// Switch the elements
var t = a(x)
a(x) = a(i)
a(i) = t
z += 1;
}
i += 1
}
if( z == 0) {
// No switches were done
switchesLeft = false
}
}
}
答案 0 :(得分:3)
骑自行车的原因是if( x == l ) x = 0
。保留它,并为循环条件写while( i + 1 < l )
,然后它可以工作。
这是一个稍微改进的版本:
def sort(a: Array[Int]) {
var l = a.length
var switchesLeft = true
while(switchesLeft) {
switchesLeft = false
for(i <- 0 until l-1 if a(i) > a(i+1)){
// Switch the elements
val t = a(i+1)
a(i+1) = a(i)
a(i) = t
switchesLeft = true
}
}
}