我正在对即将到来的重复进行一些修改:(并且我在Scala中对选择排序的以下递归实现遇到了问题。
在大多数情况下这是有效的,但它们似乎不应该在交换它们时交换前两个值。我确信这是非常基本的,但我的问题解决上限在这个阶段有点生疏
非常感谢任何想法,这是我到目前为止的代码:
object question3 {
def main(args : Array[String]) : Unit =
{
var arr = Array(8,9,8,5,2,4,1,6,3,7,5,-1,5,0,99)
arr = sort(arr, 0, 0, 0)
println("RESULT:")
arr.foreach(str=>print(str+","))
}
def sort(arr : Array[Int], n : Int, min : Int, j : Int): Array[Int] =
{
if(n == arr.length)
{
return arr
}
else
{
var j = n+1
var min = n
if(j < arr.length)
{
if(arr(j) < arr(min))
{
min = j
}
sort(arr, n+1, min, j+1)
}
if(min != n)
{
var t = arr(n)
arr(n) = arr(min)
arr(min) = t
}
sort(arr, n+1, min, j)
}
}
}
答案 0 :(得分:2)
首先,你永远不要将min和j参数用于任何事情,而是用本地定义对它们进行遮蔽。
其次,在第一次递归调用之后,不应该设置min变量。正如你的代码所代表的那样,它根据前两个初始元素中的哪一个设置min来设置min,但是从不考虑在数组后面有一个甚至更小的元素的可能性。
这给出了一些看起来更像是对Bubbleort的尝试而不是选择排序的东西。如果你想要真正的选择排序,你可能需要一个单独的循环(或递归函数)来首先找到最小元素的索引。