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)