0
RubyでQuicksortアルゴリズムを書く際に問題がたくさんあります。RubyでのQuicksortの問題
はあなたが同じ配列を設定することはできません:これは私が得ているエラーがある
def quicksort(*list)
if list.empty?
return list
end
$pivot = list.sample
list.delete_at(list.index($pivot))
current_element = list[0]
$smaller = Array.new
$larger = Array.new
list.each do |x|
if (list[x] <= $pivot)
$smaller << list[x]
else
$larger << list[x]
end
end
$sorted = Array.new
$sorted << self.quicksort(*$smaller)
$sorted << pivot
$sorted << self.quicksort(*$larger)
$sorted.flatten!
return *$sorted
end
myArray = [5, 4, 3, 2, 1]
sorted = Array.new(quicksort(myArray))
myArray.each do |x|
print x
end
print "\n"
:私のコードは完全に間違っている可能性がので、私は、C++/Javaのから来ていますあなたはC++やJavaのように、配列を返す関数に?
画像としてではなく、エラーとしてテキストを追加してください。 – AlBlue
申し訳ありませんが、エラーメッセージも読んでいますか?エラーメッセージに「配列を返す関数と等しい配列を設定する」とは何か関係があるという印象はどこで得られますか?私は、エラーメッセージは非常に明確だと思います: 'quicksort'を' private'メソッドとして定義しましたが、あなたは 'private'メソッドとして呼んでいません。あなたは、それを 'private 'メソッド、すなわち明示的な受信者なしで呼び出す必要があります。 –
カップルの考え:rubyの '$ foo'はグローバル変数です。あなたの関数内のどの変数もグローバルである必要はありません。実際には、関数は再帰的に呼び出されるたびに '$ sorted'が上書きされているので、おそらくあなたの問題を引き起こしています。 'def quicksort(* list)'でsplat演算子を使うと、リスト全体を渡すのではなく、個々の引数として 'list'の各要素を渡しています。私はこれがあなたが望むものだとは思わない。同様に、 '$ sorted'ではなく' $ sorted'を返します。 – lwassink