hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
Sort/Bubble - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

Sort

バブルソート

ソートの中でも、一番直感的でわかりやすいソートです。
安定なソートですが、ソート時間はデータ量の2乗に比例します


データを昇順ソートする場合・・・

まず、1番目と2番目のデータを比較します。
1番目のデータのほうが大きければ、1番目と2番目を入れ替えます。
次に、2番目と3番目のデータを比較します。
2番目のデータのほうが大きければ、2番目と3番目を入れ替えます。
次に、3番目と4番目のデータを比較します。
3番目のデータのほうが大きければ、3番目と4番目を入れ替えます。

このとき、4番目のデータは必ず一番大きな数字になっているので
次は、4番目のデータを調べずに、同じことを繰り返します。

1番目と2番目のデータを比較します。
1番目のデータのほうが大きければ、1番目と2番目を入れ替えます。
次に、2番目と3番目のデータを比較します。
2番目のデータのほうが大きければ、2番目と3番目を入れ替えます。

同じように、3番目のデータは4番目より小さい一番大きな数字になっているので、
3番目のデータを調べずに、もう一度同じことをします。

1番目と2番目のデータを比較します。
1番目のデータのほうが大きければ、1番目と2番目を入れ替えます。

これで、ソート完了です。

例えば、

4213

というデータをソートする場合、

1回目4213
2413
2143
2134
2回目1234
1234
1234
3回目1234
1234


のようになります。ソートが必要ない場合も、比較してしまいます・・・


実装例

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 入れるデータ数
dim rando,80
randomize
// 適当なデータを入れる
// rando=2,4,1,3,5,12,19,6,13,8,7,18,16,9,17,0,15,14,11,10
repeat length(rando)
    rando(cnt)  = rnd(length(rando))
loop
 
// ソート前のデータをコピーしておく
notesel buf2
repeat length(rando)
    noteadd "rando("+cnt+") = "+rando(cnt),-1
loop
 
// バブルソート
repeat length(rando)-1
    repeat length(rando)-1-i
        // 比較のため一時的にデータを取り出す
        d1=rando(cnt) : d2=rando(cnt+1)
 
        // データを比較して大きい場合入れ替え
        // 降順の場合は小さいときに入れ替える
        if d1>d2 : rando(cnt)=d2 : rando(cnt+1)=d1
    loop
    i++
loop
 
// 整形
notesel buf
repeat length(rando)
    noteadd "rando("+cnt+") = "+rando(cnt),-1
loop
 
// データを表示する
title "バブルソートの例"
    objmode 1
    sysfont 17
    pos   2, 4 : mes "ソート前"
    pos 312, 4 : mes "ソート後"
    pos   0,20 : mesbox buf2,300,300,0
    pos 310,20 : mesbox  buf,300,300,0
stop



  • 先ほど実行してみたところ、時々同じ数字が並んでいることがあります「 -- アキス 2007-05-14 (月) 09:04:29
  • 状況がわからないけれど勘違いしていませんか?データ群に同じ値が複数あったならソート後はその値が連続して並びます。
    例えば以下のようなデータを昇順でソートすれば
    3, 2, 3, 1, 2, 3, 2, 1, 3
    次のように並び換えられます。
    1, 1, 2, 2, 2, 3, 3, 3, 3

    -- naznyark? 2007-05-15 (火) 01:43:24


    URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-05-15 (火) 01:43:24 (2399d)