我刚刚开始学习 Scala,同时我也在做一些算法。下面是 Scala 中合并排序的实现。我知道它本质上不是非常“scala”,有些人甚至可能认为我曾尝试在 scala 中编写 java。我对 scala 并不完全熟悉,我只知道一些基本语法,如果我需要更多内容,我会继续搜索。因此,请给我一些关于我可以在此代码中做什么以使其更具功能性并符合 scala 约定和最佳实践的指示。请不要只提供正确/优化的代码,我想自己做。欢迎任何建议!
def mergeSort(list: Array[Int]): Array[Int] = {
val len = list.length
if (len == 1) list
else {
var x, y = new Array[Int](len / 2)
val z = new Array[Int](len)
Array.copy(list, 0, x, 0, len / 2)
Array.copy(list, len / 2, y, 0, len / 2)
x = mergeSort(x)
y = mergeSort(y)
var i, j = 0
for (k <- 0 until len) {
if (j >= y.length || (i < x.length && x(i) < y(j))) {
z(k) = x(i)
i = i + 1
} else {
z(k) = y(j)
j = j + 1
}
}
z
}
}
[编辑] 这段代码工作正常,我现在假设输入数组的长度总是均匀的。
更新 删除了变量 x 和 y
def mergeSort(list: Array[Int]): Array[Int] = {
val len = list.length
if (len == 1) list
else {
val z = new Array[Int](len)
val x = mergeSort(list.dropRight(len/2))
val y = mergeSort(list.drop(len/2))
var i, j = 0
for (k <- 0 until len) {
if (j >= y.length || (i < x.length && x(i) < y(j))) {
z(k) = x(i)
i = i + 1
} else {
z(k) = y(j)
j = j + 1
}
}
z
}
}