使用递归逻辑对函数进行排序

时间:2013-12-27 03:10:05

标签: ruby sorting recursion

我正在尝试使用递归逻辑以我自己的方式编写Array.sort方法。我的代码如下:

def sorting_array(unsorted,sorted)
  temp=unsorted
  if unsorted.length==0
    return sorted
  elsif unsorted.length==1
    return sorted.push(unsorted[0])
  else    
  end
  if unsorted[0]<=unsorted[1] # check the first position and add
    sorted.push(unsorted.shift)
    sorting_array(unsorted,sorted)
  else # add the 0th element to the end to handle later
    unsorted.push(unsorted.shift)
    sorting_array(unsorted,sorted)
  end
end

array=["pat","aog","cig","Zig","forse","erdvark", "aag"]
p sorting_array(array,[]) 

我很欣赏任何关于我搞砸了这些内容的见解或意见。

2 个答案:

答案 0 :(得分:1)

您的基础算法已损坏,并且在所有情况下都不会生成排序数组。这是一个简单的反例。这些是数字串的数组。我只是懒惰并省略了数组定义中的单引号/双引号:

[2, 5, 0 ,4]
"2" <= "5" => true
[2] , [5, 0, 4]
"5" <= "0" => false
[2] , [0, 4, 5]
"0" <= "4" => true
[2, 0] , [4, 5]
"4" <= "5" => true
[2, 0, 4] , [5] <=== At this point your "sorted" array is clearly not sorted

部分问题在于您的代码:

if unsorted[0]<=unsorted[1]
  sorted.push(unsorted.shift)
  sorting_array(unsorted,sorted)

if语句不提供将某些东西推入排序数组所需的保证。

答案 1 :(得分:1)

if unsorted[0]<=unsorted[1] #idea is to check the first position and add
    sorted.push(unsorted.shift)
    sorting_array(unsorted,sorted)

问题出现在:unsorted[0] sorted unsorted[0] <= unsorted[1] unsorted[0]unsortedunsorted = [100, 101, 1, 2],{{1}}。{/}

试试这个:{{1}}。