HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0924
実数ソートを速くしたいのですが2未解決


リンク

2014/9/24(Wed) 14:32:16|NO.65213

自作のスプライトモジュールを作っていますが、Z値による
スプライト表示順を入れ替える必要があります。
そこで実数のソートをしているのですが、うちのPC上で
256個のデータソートですら11ms程度かかっています。
スマホで動かす事を想定すると明らかに重すぎますので、
改良点などございましたらご指摘等お願いいたします。

#define SPRITE_MAX 16 randomize ddim jData,SPRITE_MAX repeat SPRITE_MAX jData.cnt=powf(-1,rnd(2))*0.041*rnd(100)*0.0254*rnd(100) loop ;適当にSPRITE_MAX個の実数データを作る(負数、同値も許可) redraw 0 color 0,0,0:boxf color 255,255,255 repeat SPRITE_MAX ;ソート前のデータ表示 pos 0,cnt*16:mes "data"+cnt+":"+jData.cnt loop time1=gettime(7) repeat SPRITE_MAX ;ここから★ 大きい順にソート repeat SPRITE_MAX-1-minus if jData.cnt < jData.(cnt+1){ workData=jData.(cnt+1) jData.(cnt+1)=jData.cnt jData.cnt=workData } loop minus++ loop ;ここまで★ 処理を早くしたい time1=gettime(7)-time1 repeat SPRITE_MAX ;ソート後のデータ表示 pos 160,cnt*16:mes "data"+cnt+":"+jData.cnt loop pos 320,0:mes"time:"+time1+"ms" redraw 1 repeat ;escで終了 stick ky,0 if ky&&128 :end await 1 loop



この記事に返信する


FunnyMaker

リンク

2014/9/24(Wed) 15:15:44|NO.65214

バブルソートを使っているようですね。
効果があるとは言い切れませんが、一度クイックソートを試してみてはいかかでしょうか?
バブルよりこちらの方が速くなると思います。

私の経験では自作3Dモジュールでのzソートをバブルソートからクイックソートに変えると
"圧倒的"に速くなりました。(クイックソートなくしてあのモジュールは作れなかった)



リンク

2014/9/25(Thu) 21:00:19|NO.65235

ご回答ありがとうございます。
ソート方法を変える、やっぱりそれですよね。
いろいろ調べていたところ、HSPでのマージソートの実装例を発見しまして
そのモジュールに手を加えてみたら超改善されました。
ソート後のスプライト番号並べ替えルーチンもついでに統合したりして
256個のデータでのFPSが50台から250に跳ね上がりましたので
解決とさせていただきます。



ONION software Copyright 1997-2023(c) All rights reserved.