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

Sort

選択ソート

ソート時間は代入が少ないぶんバブルソートより少し早いぐらいです


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

1番目を仮最小値にしておく
2番目と仮最小値を比較して2番目のほうが小さければ仮最小値を2番目に代入する
3番目と仮最小値,4番目と仮最小値 と行う

このとき、仮最小値は最小値になっているので
仮最小値と1番目を入れ替える

次に2番目以降の最小値を同じように見つける
そして2番目と最小値を入れ替える

以上を繰り返せばソートされる

例えば、

4213

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

1回目(仮最小値4)4213
1回目(仮最小値2)4213
1回目(仮最小値1)4213
1回目(仮最小値1)4213
4と1を入れ替え1243
2回目(仮最小値2)1243
2回目(仮最小値2)1243
2回目(仮最小値2)1243
2と2を入れ替え1234
3回目(仮最小値4)1243
3回目(仮最小値3)1243
4と3を入れ替え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
 44
 45
 46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 入れるデータ数
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
 
// 選択ソート
i=0
repeat length(rando)-1
    // とりあえず最小値を選択したものにする
    min=rando(i)
    posmin=i
    repeat length(rando)-i,i
        // 最小値を更新する
        if rando(cnt)<min : min=rando(cnt) : posmin=cnt
    loop
    // 最小値を先頭に持ってくる
    rando(posmin)=rando(i)
    rando(i)=min
    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




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

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2012-03-10 (土) 11:08:06 (638d)