2016-03-29 10 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

また、 'delete' [** ** ** **すべての一致を削除する](http://ruby-doc.org/core-2.3.0/Array.html#method-delete)という値に注意してください。 byby duplicates ... – pjs

答えて

0

あなたが持っているものの問題は、あなたが割り当てられていない変数resultnew_arrayのカップルを持っているということです。

ここでは、再帰的メソッドでpartitionを使用するカスタムソートメソッドの例を示します。配列の最初の要素をとり、partitionを使って配列を2つの部分に分割し、再帰を使ってこの最初の要素よりも小さい要素と大きい要素を含むグループにします。

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

問題ありません!がんばろう :-) –

関連する問題