HSP¥Ý¡¼¥¿¥ë
¥µ¥¤¥È¥Þ¥Ã¥× ¤ªÌ䤤¹ç¤ï¤»


HSPTV!·Ç¼¨ÈÄ


̤²ò·è ²ò·è Ää»ß ºï½üÍ×ÀÁ

2014
1217
ZP¡£¥½¡¼¥È¥×¥í¥°¥é¥à¤Ç¥¹¥¿¥Ã¥¯Îΰè¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼4²ò·è


ZP¡£

¥ê¥ó¥¯

2014/12/17(Wed) 20:08:33|NO.66493

¸½ºß¡¢¥½¡¼¥È¥×¥í¥°¥é¥à¤ò³«È¯¤·¤Æ¤¤¤Þ¤¹¡£

#module #deffunc Quicksort array data , int lops , int mod , local idx_mes , local data_list1 , local data_list2 , local data_list1_cnt , local data_list2_cnt , local data_list1_mod , local data_list2_mod , local _data /* Quicksort V , I1 , I2 V=¿ôÃͤÎÆþ¤Ã¤¿ÇÛÎóÍ×ÁÇ I1=Èæ³Ó¿ô I2=¥½¡¼¥È¥â¡¼¥É(0=¾®¤µ¤¤½ç,1=Â礭¤¤½ç) */ if lops<1 :return ;Èæ³Ó¿ô¤¬1°Ê²¼¤Ç¤¢¤ë¾ì¹ç¤Ï½ªÎ» dim data_list1,idx_mes ;Èæ³Ó1 dim data_list2,idx_mes ;Èæ³Ó2 idx_mes=data(0) ;ÀèƬʸ»ú //-------- ¥ë¡¼¥×³«»Ï --------// repeat lops-1,1 ;»Ï¤á¤Îʸ»ú¤òÈ´¤«¤·¤Æ·×¬ //----Â礭¤¤½ç¤Î¾ì¹ç if mod{ if idx_mes<data(cnt){ ;»Ï¤á¤Î¿ô»ú¤è¤ê¤âÂ礭¤¤¾ì¹ç if data_list1_cnt=0{ data_list1_mod=data(cnt) } else{ if data_list1_mod!=-1{ if data_list1_mod!=data(cnt){ data_list1_mod=-1 } } } data_list1(data_list1_cnt)=data(cnt) data_list1_cnt++ } else{ ;»Ï¤á¤Î¿ô»ú¤è¤ê¤â¾®¤µ¤¤¾ì¹ç if data_list2_cnt=0{ data_list2_mod=data(cnt) } else{ if data_list2_mod!=-1{ if data_list2_mod!=data(cnt){ data_list2_mod=-1 } } } data_list2(data_list2_cnt)=data(cnt) data_list2_cnt++ } }//----¾®¤µ¤¤½ç¤Î¾ì¹ç else{ if idx_mes>data(cnt){ ;»Ï¤á¤Î¿ô»ú¤è¤ê¤â¾®¤µ¤¤¾ì¹ç if data_list1_cnt=0{ data_list1_mod=data(cnt) } else{ if data_list1_mod!=-1{ if data_list1_mod!=data(cnt){ data_list1_mod=-1 } } } data_list1(data_list1_cnt)=data(cnt) data_list1_cnt++ } else{ ;»Ï¤á¤Î¿ô»ú¤è¤ê¤âÂ礭¤¤¾ì¹ç if data_list2_cnt=0{ data_list2_mod=data(cnt) } else{ if data_list2_mod!=-1{ if data_list2_mod!=data(cnt){ data_list2_mod=-1 } } } data_list2(data_list2_cnt)=data(cnt) data_list2_cnt++ } } loop //-------- ½ªÎ» --------// data_list1(data_list1_cnt)=idx_mes ;ºÇ½é¤ÎÃͤòÈæ³Ó1¤ËÂåÆþ data_list1_cnt++ ;Èæ³Ó1¤Î¥«¥¦¥ó¥È¤òÁý²Ã if data_list1_mod=-1 :Quicksort data_list1,data_list1_cnt,mod ;Èæ³Ó1¤òºÆ¥ë¡¼¥× if data_list2_mod=-1 :Quicksort data_list2,data_list2_cnt,mod ;Èæ³Ó2¤òºÆ¥ë¡¼¥× memcpy data , data_list1 , data_list1_cnt*4 ;¥³¥Ô¡¼ memcpy data , data_list2 , data_list2_cnt*4 , data_list1_cnt*4 ;¥³¥Ô¡¼2 return #global ;¥â¥¸¥å¡¼¥ë¤Î½ªÎ» //----½é´üÅÐÏ¿ #include "d3m.hsp" randomize //----¥é¥ó¥À¥à¤ËÃͤòºîÀ® lop=10000 ;¿ô dim data,lop repeat lop data.cnt=rnd(10) ;Íð¿ô loop //----¥½¡¼¥ÈÁ°¤Î¾õÂÖ¤òɽ¼¨ sdim list repeat lop list+""+data.cnt+" , " loop mesbox list,640,240 //----¥½¡¼¥È time=d3timer() Quicksort data,lop,1 _time=1.0*(d3timer()-time)/1000 title "³Ý¤«¤Ã¤¿»þ´Ö"+strf("%.3f",_time) //----¥½¡¼¥È¸å¤Î¾õÂÖ¤òɽ¼¨ sdim list repeat lop list+""+data.cnt+" , " loop pos 0,240 mesbox list,640,240
¤·¤«¤·¡¢¤³¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¡¢¡Ö¥¹¥¿¥Ã¥¯Îΰè¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Ç¤¹¡×¤Èɽ¼¨¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
Ä´¤Ù¤Æ¤ß¤ë¤È¡¢¡Ö¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¥Í¥¹¥È¤¬Â¿¤¯¸Æ¤Ó½Ð¤·¤¬Ï¢Â³¤·¤¿¤È¤­¡¢HSP¤¬¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¸Æ¤Ó½Ð¤·¸µ¤ò³Ð¤¨¤­¤ì¤Ê¤¤¤È¤­¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£¡×¤È¤¤¤¦»ö¤é¤·¤¤¤Ç¤¹¤¬¡¢
¥¨¥é¡¼¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤¦¤Þ¤¯¥×¥í¥°¥é¥à¤¬ÁȤá¤ë¤Ç¤·¤ç¤¦¤«¡©



¤³¤Îµ­»ö¤ËÊÖ¿®¤¹¤ë


FunnyMaker

¥ê¥ó¥¯

2014/12/17(Wed) 20:48:46|NO.66494

¥³¡¼¥É¤ò¥¶¥Ã¤È¸Æ¤ó¤À¤À¤±¤Ç¤¹¤¬¡¢ºÆµ¢¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¤è¤Í...?

#deffunc¤ÇÄêµÁ¤·¤¿¥ë¡¼¥Á¥ó¤Ø¤Î¥¸¥ã¥ó¥×¤Ïgosub¤Ë¤è¤ë¥µ¥Ö¥ë¡¼¥Á¥ó¥¸¥ã¥ó¥×¤ÈÂçÂΰì½ï¤Ç¤¹¡£
Ì¿Îá¤ÎÃ椫¤é¼«¿È¤ò²¿²ó¤âºÆ¸Æ¤Ó½Ð¤·¤Æ¤¤¤Æ¤Ï¥Í¥¹¥È¤¬¿¼¤¯¤Ê¤Ã¤Æ¡¢HSP¤Ç¤Ï¥¢¥¦¥È¤Ë¤Ê¤ê¤Þ¤¹¡£
Ä󼨤µ¤ì¤¿¥³¡¼¥É¤Ç¤Ï¡¢sublev (¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¥Í¥¹¥È¥ì¥Ù¥ë)¤¬511¤òĶ¤¨¤¿»þÅÀ¤Ç»à¤ó¤Ç¤¤¤Þ¤·¤¿¡£
ºÆµ¢¤ò»È¤ï¤Ê¤¤ÊýË¡¤ËÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£



FunnyMaker

¥ê¥ó¥¯

2014/12/17(Wed) 20:59:22|NO.66495

Ï¢Å꼺Î餷¤Þ¤¹¡£

¤Ç¤Ï¤É¤¦¤¹¤ì¤Ð¤è¤¤¤«¡©
¤È¤¤¤¦¤³¤È¤Ç¤·¤¿¤Í...¡£

¤Þ¤¡¡¢Â礷¤¿¤³¤È¤Ï¤Ê¤¤¤ó¤Ç¤¹¡£»ä¤Ç¤µ¤¨»×¤¤¤Ä¤¯¤ó¤Ç¤¹¤«¤é¡£
ËÜÅö¤Ï¤­¤Á¤ó¤ÈÀâÌÀ¤·¤¿¤¤¤Ç¤¹¤¬¡¢Ë»¤·¤¯¤ÆÀâÌÀ¤¹¤ë²Ë¤¬¤Ê¤¤¤Î¤Ç¤È¤ê¤¢¤¨¤ºÀۺ¡¼¥É¤òŽ¤Ã¤Æ¤ª¤­¤Þ¤¹¡£»²¹Í¤Þ¤Ç¤Ë¡£

ÂԤäƤ¤¤ì¤Ð¡¢¤â¤Ã¤È¾å¼ê¤¤¿Í¤¬¸½¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£



#module N_M_S2_5 ;1¼¡¸µÇÛÎó¤Î¥¯¥¤¥Ã¥¯¥½¡¼¥È ;¶è´Ö¤ò»ØÄê¤Ç¤­¤ë¡£ ;¾¤Î1¼¡¸µÇÛÎó¤ò´¬¤­Åº¤¨¤Ë¤·¤Æ¥½¡¼¥È¤¹¤ë¡£ ; ;[½ñ¼°] ; ; MS2_Quick3 TGTARRY,ATTENDANT , opt, s,e ; ; TGTARRY : ¥¿¡¼¥²¥Ã¥ÈÇÛÎó ; ATTENDANT : ÉÕ¤­Åº¤¤ÇÛÎó ; opt : À°Î󥪥ץ·¥ç¥ó(other,1)=(¾º½ç,¹ß½ç) ; s,e : ³«»Ï,½ªÎ»¥¤¥ó¥Ç¥Ã¥¯¥¹ ; ;[È÷¹Í] ; ; Í×ÁÇ¿ô1°Ê²¼¤Î¥Ç¡¼¥¿¤òÅϤ·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ ; ¥¨¥é¡¼¥Á¥§¥Ã¥¯¤ò¾Ê¤¤¤Æ¤¤¤ë¡£°ú¿ô¤ÎÉÔÀµ¤ÏÃ×Ì¿½ý¤Ë¤Ê¤ë¡£ #deffunc MS2_Quick3 array TGT, array ATTENDANT, int opt, int s,int e ;[ÍѸì] ; ;¡¦¡Ö¼éÈ÷ÈÏ°Ï¡× ; ¥¿¡¼¥²¥Ã¥È¤Î¤¦¤Á¡¢º£²ó¥½¡¼¥ÈÂоݤȤʤäƤ¤¤ëÈÏ°Ï¡£ ; ;¡¦¡ÖÁàºî1¡× ; °ìÄê¤Î¶è´ÖÆâ¤Ç¥Ô¥Ü¥Ã¥È(¤³¤ÎÃͤòp¤È¤¹¤ë)¤ò·èÄꤷ¡¢p°Ê²¼¤ÎÍ×ÁǤò¶è´ÖÁ°Êý¤Ë¡¢p°Ê¾å¤ÎÍ×ÁǤò¶è´ÖÁ°Êý¤Ë´ó¤»½¸¤á¤ëÁàºî¡£ ; ;¡¦¡Ö¥¢¥¯¥Æ¥£¥Ö¶è´Ö¡× ; ¸½ºßÁàºî1¤ÎÂоݤȤʤäƤ¤¤ë¶è´Ö¡£ ; ¾ï¤ËÂè0¶è´Ö¤¬¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Ç¤¢¤ë¡£ ; ;¡¦¡Ö¥«¥ì¥ó¥È¥¹¥­¥ã¥ó¥¤¥ó¥Ç¥Ã¥¯¥¹(CSI)¡× ; Áàºî1¤Ë¤ª¤¤¤Æp°Ê²¼,°Ê¾å¤ÎÃͤòõº÷¤¹¤ë¤¿¤á¤Î¡¢¸½ºß¸¡ººÃæ¤ÎÍ×ÁǤΡ¢¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Îº¸Ã¼¤ò´ðÅÀ¤È¤·¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹¡£ ; º¸¢ª±¦¤Î¸¡ºº¤Ç¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò¡ÖLCSI¡×¡¢±¦¢ªº¸¤Î¤â¤Î¤ò¡ÖRCSI¡×¤È¸Æ¤Ö¡£ len_RANGE = e-s+1 ;¼éÈ÷ÈϰϤÎÂ礭¤µ num_area_remain = 1 ;»Ä¤Ã¤Æ¤¤¤ë¶è´Ö¿ô(½é´ü²½) dim Area,len_RANGE : Area = s,e ;¶è´Ö¥Ç¡¼¥¿½é´ü²½ ;! ¶è´Ö¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È ! ; Í×ÁÇ(2*i),(2*i+1)¤ËÂèi¶è´Ö¤Î³«»Ï,½ªÎ»¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬µ­Ï¿¤µ¤ì¤ë¡£ ; Í×ÁǤÏÁ°¤«¤éµÍ¤á¤Æµ­Ï¿¤µ¤ì¤ë¡£ if opt { ;¹ß½ç repeat ln_AA = Area(1)-Area+1 ;¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤ÎŤµ ;< ¥Ô¥Ü¥Ã¥È¤ÎÁªÄê > if TGT(Area) < TGT(Area+1) { val_pivot = TGT(Area) } else { val_pivot = TGT(Area+1) } ;< Áàºî1 > LCSI = 0 : RCSI = ln_AA-1 repeat ;< LCSI¤ò±¦¤Ë¿Ê¤á¤ë > repeat if TGT(Area+LCSI) <= val_pivot : break LCSI ++ loop ;< RCSI¤òº¸¤Ë¿Ê¤á¤ë > repeat if TGT(Area+RCSI) >= val_pivot : break RCSI -- loop if LCSI < RCSI { ;Í׸ò´¹ k0 = Area+LCSI : k1 = Area+RCSI TmpVal1 = TGT(k0) : TGT(k0) = TGT(k1) : TGT(k1) = TmpVal1 ;¼ÂÃ͸ò´¹ TmpVal2 = ATTENDANT(k0) : ATTENDANT(k0) = ATTENDANT(k1) : ATTENDANT(k1) = TmpVal2 ;ÉÕ¤­Åº¤¤ÇÛÎóÁàºî LCSI ++ : RCSI -- } else { ;Í׶è´Öʬ³ä ;¢¨¼¡¤Î¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ë ; ­¡ 0¡åRCSI¡åLCSI¡åln_AA-1 ; ­¢ |LCSI-RCSI|¡å1 break } loop ;< ¶è´Öʬ³ä > ;LCSI¤Îº¸ÎÙ¤ò¶­¤È¤·¤Æ¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤òʬ³ä¤¹¤ë ;¶è´Ö¿ô¤ÎÁý²Ã¤Ï-1,+0,+1¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ num_area_remain -- ;¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Î¶è´ÖÅÐÏ¿²ò½ü ;< º¸Â¦¿·µ¬¶è´Ö¸õÊä¤Î¶ãÌ£ > if LCSI >= 2 { ;ÅÐÏ¿²ÁÃÍÍ­¤ê endIdx_AA_prev = Area(1) ;µì¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Î½ªÎ»¥¤¥ó¥Ç¥Ã¥¯¥¹ Area(1) = Area+LCSI-1 num_area_remain ++ flg0 = 1 ;º¸Â¦¿·µ¬¶è´ÖȯÀ¸¥Õ¥é¥° } else : flg0 = 0 ;< ±¦Â¦¿·µ¬¶è´Ö¸õÊä¤Î¶ãÌ£ > if LCSI <= ln_AA-2 { ;ÅÐÏ¿²ÁÃÍÍ­¤ê if flg0 { Area(2*num_area_remain) = Area+LCSI, endIdx_AA_prev } else { Area += LCSI } num_area_remain ++ flg1 = 0 ;¶è´Ö¿ô¸º¾¯¥Õ¥é¥° } else { if flg0 { flg1 = 0 } else { flg1 = 1 } } ;< ¶è´Ö¿ô¤¬¸º¾¯¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥ê¥¢¥Ç¡¼¥¿¤ò¥·¥Õ¥È¤¹¤ë > if flg1 : memcpy Area,Area, 8*num_area_remain, 0,8 ;< ´°Î»¸¡ºº > if num_area_remain = 0 : break loop } else { ;¾º½ç repeat ln_AA = Area(1)-Area+1 ;¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤ÎŤµ ;< ¥Ô¥Ü¥Ã¥È¤ÎÁªÄê > if TGT(Area) < TGT(Area+1) { val_pivot = TGT(Area+1) } else { val_pivot = TGT(Area) } ;< Áàºî1 > LCSI = 0 : RCSI = ln_AA-1 repeat ;< LCSI¤ò±¦¤Ë¿Ê¤á¤ë > repeat if TGT(Area+LCSI) >= val_pivot : break LCSI ++ loop ;< RCSI¤òº¸¤Ë¿Ê¤á¤ë > repeat if TGT(Area+RCSI) <= val_pivot : break RCSI -- loop if LCSI < RCSI { ;Í׸ò´¹ k0 = Area+LCSI : k1 = Area+RCSI TmpVal1 = TGT(k0) : TGT(k0) = TGT(k1) : TGT(k1) = TmpVal1 ;¼ÂÃ͸ò´¹ TmpVal2 = ATTENDANT(k0) : ATTENDANT(k0) = ATTENDANT(k1) : ATTENDANT(k1) = TmpVal2 ;ÉÕ¤­Åº¤¤ÇÛÎóÁàºî LCSI ++ : RCSI -- } else { ;Í׶è´Öʬ³ä ;¢¨¼¡¤Î¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ë ; ­¡ 0¡åRCSI¡åLCSI¡åln_AA-1 ; ­¢ |LCSI-RCSI|¡å1 break } loop ;< ¶è´Öʬ³ä > ;LCSI¤Îº¸ÎÙ¤ò¶­¤È¤·¤Æ¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤òʬ³ä¤¹¤ë ;¶è´Ö¿ô¤ÎÁý²Ã¤Ï-1,+0,+1¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ num_area_remain -- ;¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Î¶è´ÖÅÐÏ¿²ò½ü ;< º¸Â¦¿·µ¬¶è´Ö¸õÊä¤Î¶ãÌ£ > if LCSI >= 2 { ;ÅÐÏ¿²ÁÃÍÍ­¤ê endIdx_AA_prev = Area(1) ;µì¥¢¥¯¥Æ¥£¥Ö¶è´Ö¤Î½ªÎ»¥¤¥ó¥Ç¥Ã¥¯¥¹ Area(1) = Area+LCSI-1 num_area_remain ++ flg0 = 1 ;º¸Â¦¿·µ¬¶è´ÖȯÀ¸¥Õ¥é¥° } else : flg0 = 0 ;< ±¦Â¦¿·µ¬¶è´Ö¸õÊä¤Î¶ãÌ£ > if LCSI <= ln_AA-2 { ;ÅÐÏ¿²ÁÃÍÍ­¤ê if flg0 { Area(2*num_area_remain) = Area+LCSI, endIdx_AA_prev } else { Area += LCSI } num_area_remain ++ flg1 = 0 ;¶è´Ö¿ô¸º¾¯¥Õ¥é¥° } else { if flg0 { flg1 = 0 } else { flg1 = 1 } } ;< ¶è´Ö¿ô¤¬¸º¾¯¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥ê¥¢¥Ç¡¼¥¿¤ò¥·¥Õ¥È¤¹¤ë > if flg1 : memcpy Area,Area, 8*num_area_remain, 0,8 ;< ´°Î»¸¡ºº > if num_area_remain = 0 : break loop } return #global //*----------------------------¢¦ sample ¢¦----------------------------*// #include "d3m.hsp" screen 0,350,480 numdim = 5000 dim TGT,numdim dim TGTCPY,numdim dim ATTENDANT,numdim repeat numdim TGT(cnt) = rnd(numdim) TGTCPY(cnt) = TGT(cnt) ATTENDANT(cnt) = cnt loop s = 1000 : e = 3999 len_range = e-s+1 mes ""+numdim+"¸ÄÃæ "+s+"¡Á"+e+" ´Ö¤Î¥Ç¡¼¥¿¤ò¥½¡¼¥ÈÃæ..." t1 = d3timer() MS2_Quick3 TGT,ATTENDANT, 0, s,e t2 = d3timer() mes "´°Î»¡£½êÍ×»þ´Ö "+str(t2-t1)+" ms" sdim buf_TGTCPY,8*numdim sdim buf_TGT,8*numdim repeat numdim-1 buf_TGTCPY += ""+TGTCPY(cnt)+"\n" buf_TGT += ""+TGT(cnt)+"\n" loop buf_TGTCPY += TGTCPY(numdim-1) buf_TGT += TGT(numdim-1) lisb = 0,0 pos 0,50 : mes "À°ÎóÁ°¥Ç¡¼¥¿" objmode 1,1 objsize 100,400 pos 0,70 : listbox lisb(0),0,buf_TGTCPY pos 150,50 : mes "À°Îó¸å¥Ç¡¼¥¿" pos 150,70 : listbox lisb(1),0,buf_TGT //*----------------------------¢¤ sample ¢¤----------------------------*//



ZP¡£

¥ê¥ó¥¯

2014/12/18(Thu) 20:36:08|NO.66498

ÊÖ¿®ÃÙ¤¯¤Ê¤ê¤¹¤ß¤Þ¤»¤ó¡£
¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡ª¡¡¤È¤Æ¤â»²¹Í¤Ë¤Ê¤ê¤Þ¤·¤¿¡ª
¤Á¤ç¤Ã¤ÈÍý²ò¤¬Æñ¤·¤¤¤Ç¤¹¤¬¡¢¤Ê¤ó¤È¤«¤Ç¤­¤½¤¦¤Ç¤¹¡£
²ò·èºÑ¤ß¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£



ZP¡£¡¡ºÇ¸å¤Ë¡£

¥ê¥ó¥¯

2014/12/19(Fri) 19:23:57|NO.66508

´°À®¤·¤¿¤Î¤Ç¡¢¥½¡¼¥¹¤òºÜ¤»¤Æ¤ª¤­¤Þ¤¹¡£

#module #deffunc Quicksort array data , int lops , int mod , local data_list1 , local data_list2 , local nest , local _nest , local loadmem_s , local loadmem_e , local loadmod , local data1cnt , local data2cnt , local zmod1 , local zmod2 , local _data1 , local _data2 , local errmod /* Quicksort V , I1 , I2 V=¿ôÃͤÎÆþ¤Ã¤¿ÇÛÎóÍ×ÁÇ I1=Èæ³Ó¿ô I2=¥½¡¼¥È¥â¡¼¥É(0=¾®¤µ¤¤½ç,1=Â礭¤¤½ç) */ if looplev>500 :return -1 ;¥Í¥¹¥È¤¬¿¼¤¹¤®¤ë dim data_list1,idx_mes ;Èæ³Ó1 dim data_list2,idx_mes ;Èæ³Ó2 nest=0 ;¥Í¥¹¥È _nest=0 nest_max=1000 ;¥Í¥¹¥ÈΨ¤Î¥Þ¥Ã¥¯¥¹ÃÍ dim loadmem_s,nest_max ;¥Ç¡¼¥¿¡¼È´¤­¼è¤ê³«»Ï°ÌÃÖ dim loadmem_e,nest_max ;¥Ç¡¼¥¿¡¼È´¤­¼è¤ê½ªÅÀ°ÌÃÖ dim loadmod,nest_max ;¼Â¹Ô¥â¡¼¥É dim data1cnt,nest_max ;¥Ç¡¼¥¿¡¼¥«¥¦¥ó¥È1 dim data2cnt,nest_max ;¥Ç¡¼¥¿¡¼¥«¥¦¥ó¥È2 dim zmod1,nest_max ;¥Ç¡¼¥¿¡¼¥«¥¦¥ó¥È1 dim zmod2,nest_max ;¥Ç¡¼¥¿¡¼¥«¥¦¥ó¥È2 loadmem_s(0)=0 loadmem_e(0)=lops dim _data1,lops ;°ì»þÊݸ¥Ç¡¼¥¿¡¼1 dim _data2,lops ;°ì»þÊݸ¥Ç¡¼¥¿¡¼2 repeat if nest>_nest :_nest=nest if errmod :break ;title "¥Í¥¹¥È¡§"+_nest+" "+nest+",["+cnt+"]" if nest<0 :break ;¥Í¥¹¥È¤¬Ìµ¤¯¤Ê¤Ã¤¿¤é¥ë¡¼¥×æ½Ð switch loadmod(nest) case 0 _dmos=data(loadmem_s(nest)) ;»Ï¤á¤ÎÃͤò¼èÆÀ zmod1(nest)=0 :zmod2(nest)=0 ;½ÅÊ£¥â¡¼¥É(-1=½ÅÊ£³ÎÄê,0~=½ÅÊ£¤µ¤ì¤Æ¤¤¤Ê¤¤) repeat loadmem_e(nest)-loadmem_s(nest)-1,1 ;»Ï¤á¤Îʸ»ú¤òÈ´¤«¤·¤Æ·×¬ _cnt=cnt+loadmem_s(nest) if mod{ if data(_cnt)>_dmos{ if cnt>1{ if zmod1(nest)!=-1{ if zmod1(nest)!=data(_cnt){ zmod1(nest)=-1 ;½ÅÊ£³ÎÄê } } }else{ ;¥«¥¦¥ó¥È¤¬0¤Î¾ì¹ç zmod1(nest)=data(_cnt) } _data1(data1cnt(nest))=data(_cnt) data1cnt(nest)++ } else{ if cnt>1{ if zmod2(nest)!=-1{ if zmod2(nest)!=data(_cnt){ zmod2(nest)=-1 ;½ÅÊ£³ÎÄê } } }else{ ;¥«¥¦¥ó¥È¤¬0¤Î¾ì¹ç zmod2(nest)=data(_cnt) } _data2(data2cnt(nest))=data(_cnt) data2cnt(nest)++ } } else{ if data(_cnt)<_dmos{ if cnt>1{ if zmod1(nest)!=-1{ if zmod1(nest)!=data(_cnt){ zmod1(nest)=-1 ;½ÅÊ£³ÎÄê } } }else{ ;¥«¥¦¥ó¥È¤¬0¤Î¾ì¹ç zmod1(nest)=data(_cnt) } _data1(data1cnt(nest))=data(_cnt) data1cnt(nest)++ } else{ if cnt>1{ if zmod2(nest)!=-1{ if zmod2(nest)!=data(_cnt){ zmod2(nest)=-1 ;½ÅÊ£³ÎÄê } } }else{ ;¥«¥¦¥ó¥È¤¬0¤Î¾ì¹ç zmod2(nest)=data(_cnt) } _data2(data2cnt(nest))=data(_cnt) data2cnt(nest)++ } } loop _data1(data1cnt(nest))=_dmos ;»Ï¤á¤ÎÃͤòÂåÆþ data1cnt(nest)++ ;¥«¥¦¥ó¥ÈÁý²Ã if nest_max<nest-2{ ;¥Í¥¹¥È¤¬¿¶¤êÀڤ俾ì¹ç¤Ï¸ÄÊ̤˽èÍý510Ķ¤¨¤ë¤È¥¨¥é¡¼ Quicksort _data1,data1cnt(nest),mod Quicksort _data2,data2cnt(nest),mod if stat=-1 :errmod=-1 :swbreak memcpy data , _data1 , data1cnt(nest)*4 , loadmem_s(nest)*4 memcpy data , _data2 , data2cnt(nest)*4 , loadmem_s(nest)*4 + data1cnt(nest)*4 nest-- swbreak } memcpy data , _data1 , data1cnt(nest)*4 , loadmem_s(nest)*4 memcpy data , _data2 , data2cnt(nest)*4 , loadmem_s(nest)*4 + data1cnt(nest)*4 loadmod(nest)++ ;¥â¡¼¥ÉÊѹ¹ nest++ ;¥Í¥¹¥ÈÁý²Ã if data1cnt(nest-1)>1 & zmod1(nest-1)=-1{ loadmem_s(nest)=loadmem_s(nest-1) loadmem_e(nest)=loadmem_s(nest-1) + data1cnt(nest-1) loadmod(nest)=0 data1cnt(nest)=0 data2cnt(nest)=0 }else{ nest-- } swbreak case 1 loadmod(nest)++ ;¥â¡¼¥ÉÊѹ¹ nest++ ;¥Í¥¹¥ÈÁý²Ã if data2cnt(nest-1)>1 & zmod2(nest-1)=-1{ loadmem_s(nest)=loadmem_s(nest-1) + data1cnt(nest-1) loadmem_e(nest)=loadmem_e(nest-1) loadmod(nest)=0 data1cnt(nest)=0 data2cnt(nest)=0 }else{ nest-- } swbreak default nest-- ;¥Í¥¹¥È¸º¾¯ swbreak swend loop if errmod :return errmod return 0 #global ;¥â¥¸¥å¡¼¥ë¤Î½ªÎ» //----½é´üÅÐÏ¿ #include "d3m.hsp" randomize //----¥é¥ó¥À¥à¤ËÃͤòºîÀ® lop=10000 ;¿ô dim data,lop repeat lop data.cnt=rnd(100) ;Íð¿ô loop //----¥½¡¼¥ÈÁ°¤Î¾õÂÖ¤òɽ¼¨ sdim list repeat lop list+""+data.cnt+" , " loop mesbox list,640,240 //----¥½¡¼¥È title "·×¬Ãæ" await time=d3timer() Quicksort data,lop,1 if stat :dialog "½èÍý¥¨¥é¡¼",1,"¥¨¥é¡¼" _time=1.0*(d3timer()-time)/1000 title "³Ý¤«¤Ã¤¿»þ´Ö"+strf("%.3f",_time) await //----¥½¡¼¥È¸å¤Î¾õÂÖ¤òɽ¼¨ sdim list repeat lop list+""+data.cnt+" , " loop pos 0,240 mesbox list,640,240

¾¯¡¹Ä¹¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¤¬¡¢»²¹Í¤Ë¤Ê¤ì¤ì¤Ð¹¬¤¤¤Ç¤¹¡£



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