递归选择排序问题

时间:2011-08-06 15:17:45

标签: scala sorting recursion selection

我正在对即将到来的重复进行一些修改:(并且我在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)
      }
  }
}

1 个答案:

答案 0 :(得分:2)

首先,你永远不要将min和j参数用于任何事情,而是用本地定义对它们进行遮蔽。

其次,在第一次递归调用之后,不应该设置min变量。正如你的代码所代表的那样,它根据前两个初始元素中的哪一个设置min来设置min,但是从不考虑在数组后面有一个甚至更小的元素的可能性。

这给出了一些看起来更像是对Bubbleort的尝试而不是选择排序的东西。如果你想要真正的选择排序,你可能需要一个单独的循环(或递归函数)来首先找到最小元素的索引。