挿入ソートアルゴリズムのRuby実装と高度な双方向挿入ソートコード例
2022-01-04 02:44:20
基本事項
ソートされたテーブルに行を挿入し、1つインクリメントされた行を持つ順序付きテーブルを取得します。重要な点は、現在の要素より大きな行をすべて後ろに移動して、"own" の挿入位置を空にすることです。n-1回の挿入が完了すると、レコードは順番に並んだ状態になります。
def insertSort(tarray)
i=1
while(i < tarray.size) do
if tarray[i] < tarray[i-1]
j=i-1
x=tarray[i]
#puts x.class
#puts tarray[i].class
tarray[i]=tarray[i-1] # swap positions with the first one on the left that is bigger than yourself first
while(x< tarray[j].to_i) do#find one smaller than yourself and put it after
tarray[j+1]=tarray[j]
#puts tarray[j].class
j=j-1
end
tarray[j+1]=x
end
i=i+1
end
end
a=[5,2,6,4,7,9,8]
insertSort(a)
print a
[2, 4, 5, 6, 7, 8, 9]>Exit code: 0
x< tarray[j]のところでto_iメソッドを使わないでコードを書き始めたところ、以下のエラーが発生しました。
final.rb:10:in `<': comparison of Fixnum with nil failed (ArgumentError)
最初は混乱したので、x.class, tarray[j].class と出力しましたが、どちらも Fixnum と出力されました。それから、Ruby の Array クラスはちょっと違うことがわかりました。Ruby では Array オブジェクトに異なる型の要素を格納できます。x に a の要素を代入したときに a[i かどうか判断できません。これは私自身の理解ですが、Ruby の Array クラスは、このように出力されます。
高度な
折り返し挿入ソートを基本とした2方向挿入ソート。
def two_way_sort data
first,final = 0,0
temp = []
temp[0] = data[0]
result = []
len = data.length
for i in 1... (len-1)
if data[i]>=temp[final]
final += 1
temp[final] = data[i]
elsif data[i]<= temp[first]
first = (first - 1 + len)%len
temp[first] = data[i]
else
if data[i]<temp[0]
low = first
high = len -1
while low <=high do
m = (low + high)>>1
if data[i]>temp[m]
low = m + 1
else
high = m -1
end
end
j = first - 1
first -=1
while j < high do
temp[j] = temp[j+1]
j += 1
end
temp[high] = data[i]
else
low = 0
high = final
while low <=high do
m = (low + high)>>1
if data[i]>=temp[m]
low = m + 1
else
high = m - 1
end
end
j = final + 1
final += 1
while j > low do
temp[j] = temp[j-1]
j -=1
end
temp[low] = data[i]
end
end
p temp
end
i = 0
for j in first. (len - 1)
result[i] = temp[j]
i += 1
end
for j in 0...final
result[i] = temp[j]
i +=1
end
return result
end
data = [4,1,5,6,7,2,9,3,8].shuffle
p data
result = two_way_sort data
p result
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
画像フィルターアルゴリズムコードのRuby実装
-
UbuntuでRuby on RailsフレームワークとRubyMine IDEを設定する
-
Rubyのgemパッケージ管理およびgemソース構築のチュートリアル
-
Rubyのデザインパターン。アダプタパターン実践ガイド
-
RubyのSimple FactoryパターンとFactory Methodパターンを利用する
-
CentOS7でruby on railsの開発環境を構築する。
-
Ruby on Railsの基礎 - 新規プロジェクト
-
Rubyのプライベートとプロテクトを簡単にご紹介します。
-
Rubyでコレクションを書くためのガイド
-
Rubyプログラミングにおけるアサインメント関連操作