我正在尝试使用递归逻辑以我自己的方式编写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,[])
我很欣赏任何关于我搞砸了这些内容的见解或意见。
答案 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]
,unsorted
,unsorted = [100, 101, 1, 2]
,{{1}}。{/}
试试这个:{{1}}。