2016-03-29 31 views
-1

我試圖用遞歸方法在Ruby中重新創建「.sort」函數。然而,我所得到的結果都是'無',我不知道爲什麼。任何人都可以看到我做錯了什麼?在Ruby中使用遞歸方法創建排序方法(不使用.sort)

def sort arr 
    if arr.length > 0 
    result << arr.min 
    arr.delete(arr.min) 
    sort arr 
    else 
    new_array.length == 0 
    result 
    end 
end 
+2

'result'和'new_array'都出現在你的代碼中。 – SlySherZ

+0

不知何故,我認爲你發明了一種排序方法,甚至比泡泡排序還要糟糕。如果你想了解編程,爲什麼不實施一個簡單的[樹排序](https://en.wikipedia.org/wiki/Tree_sort)?有很多[可以使用的不同方法](https://en.wikipedia.org/wiki/Sorting_algorithm)。 – tadman

+0

另外值得注意的是,'刪除'[刪除**所有**匹配](http://ruby-doc.org/core-2.3.0/Array.html#method-i-刪除)的值,再見再見... – pjs

回答

0

與你有什麼問題是,你有一對夫婦未分配的變量resultnew_array的。

下面是使用partition和遞歸方法的自定義排序方法的示例。它使用數組的第一個元素,並將數組分割爲兩部分,使用partition將它們組成一個包含小於和大於第一個使用遞歸的第一個元素的元素的組。

def sort(arr) 
    return [] if arr.length == 0 

    f_element = arr.shift 
    less, greater = arr.partition {|x| x < f_element } 
    sort(less) + [f_element] + sort(greater) 
end 

arr = "happiness".chars 
print sort(arr) 
#=> ["a", "e", "h", "i", "n", "p", "p", "s", "s"] 
+0

謝謝!這真的很有幫助。全部排序.. –

+0

沒問題!祝你好運 :-) –