3

だから私は.sortメソッドを使わずに配列をソートする方法を学ぼうとしています.これは私がこれまでに持っているものですが、真ん中の数字は抜けています.

def  my_sort(num)
for j in 1...num.length
    key = num[j]
    i = j - 1
    while i > 0 and num[i] = key
            num[i+1] = num[i]
            i = i - 1
    end
    num[i+1] = key
end     

end

次に、メソッドを実行します

my_sort([3,1,2])

私は得る

=> 1...3 

でも私はしたい

=> 1,2,3

私は何を間違っていますか?

4

2 に答える 2

2

変更された配列を返すのではなく、forイテレータに渡されたオブジェクトを返します。

あなたが見逃しているのは、単に配列をメソッドの最後のものとして残すことです:

def my_sort(num)
  # ...

  num
end

注意として、与えられた議論を台無しにするのは通常悪い形です。より丁寧な関数はコピーを返します。

于 2012-06-14T05:58:58.750 に答える
0

挿入ソートの実際の実装は次のようになります。

def my_sort(arr)
  for j in 1...arr.length
    key = arr[j]
    i = j-1
    while i>=0 and arr[i] > key # You used arr[i] = key here instead
      arr[i+1] = arr[i]
      i = i-1
    end 
    arr[i+1] = key
  end 
  arr #return the array
end 
于 2012-06-14T07:41:00.013 に答える