メニュー
モジュール・プラグイン
HSPモジュール・プラグインなど。
htmlプラグインエラー: このプラグインを使うにはこのページの編集権限を「管理者のみ」に設定してください。
配列のソート
HSPだけでなく、プログラム関連全般に言えることだと思いますが、配列のソートって、結構重要になってくると思います。
そこで、配列のソートについて簡単にまとめておきたいと思います。
まず、n個の配列要素があるとします。それぞれはランダムに並んでいると仮定します。ソートするためには、とにかく順番に並べ替えればよいのですが、ほぼ無制限に並べ替えてもCPUの負荷が高くなるだけなので、何回繰り返せばよいのかを計算で出してみたいと思います。
これには法則があるらしく、n個の配列要素がランダムに並んでいる時、ソートを完了させるためには
(n-1)×(n-1)
回並べ替えればよいことになります。
たとえば、AからEまでのアルファベットがランダムに並べられているとします。
D C B A E
なぜ(nー1)×(n-1)回かと言うと、仮に5つのアルファベットがソートしたい順番と全く逆に並んでいた場合、5つの要素を片側から2つずつ入れ替えていくと、まず4回入れ替えなければいけません。ただし、2つの要素がソートされていた場合は、並べ替えずに1回分カウントします。それらを4回繰り返すと、必ずソートしたい順番に並びます。
E D C B A
 ̄  ̄
そのため結果的に、n個の配列要素がランダムに並んでいる時、ソートを完了させるためには(n-1)×(n-1)
回並べ替えればよいことになります。
↓こんな感じでいいと思いますが...、もし間違いがあればどなたか改良お願いします。
; 配列要素をソートするモジュール Ver.1.0 (sort.as)
; このスクリプトはHSP3専用です
#module __sort__
#deffunc sortnum int num_1,int num_2 ; 2種類 の要素(int)をソートする
ret=0
if(num_1=num_2){
ret=0
}else:if(num_1>num_2){
ret=1
}else:if(num_1<num_2){
ret=2
}
return ret
#deffunc sortdim array hairetu,int maxmin ; 1次元の配列要素をソートする
leng=length(hairetu) ; ここから 1次元かどうかチェック
leng2=length2(hairetu)
leng3=length3(hairetu)
leng4=length4(hairetu)
if(leng2!0)|(leng3!0)|(leng4!0):return -1
if(maxmin!1)&(maxmin!0):maxmin=0 ; ここまで 1次元かどうかチェック
repeat leng-1 ; maxmin =0なら 小さい順にソート
srt=0 ; maxmin =1なら 大きい順にソート
repeat leng-1
st1=hairetu(srt)
st2=hairetu(srt+1)
taihi=0
if(st1>st2){
if(maxmin=0){
taihi=st1
st1=st2
st2=taihi
}
}else:if(st1<st2){
if(maxmin=1){
taihi=st1
st1=st2
st2=taihi
}
}
hairetu(srt)=st1
hairetu(srt+1)=st2
srt+=1
loop
loop
return 1
#global
この下に”sort.as”というファイルがあります。
最終更新:2006年05月17日 21:03