|
 | ̤²ò·è |
 | ²ò·è |
 | Ää»ß |
 | ºï½üÍ×ÀÁ |
|
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¤¬¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¸Æ¤Ó½Ð¤·¸µ¤ò³Ð¤¨¤¤ì¤Ê¤¤¤È¤¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£¡×¤È¤¤¤¦»ö¤é¤·¤¤¤Ç¤¹¤¬¡¢
¥¨¥é¡¼¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤¦¤Þ¤¯¥×¥í¥°¥é¥à¤¬ÁȤá¤ë¤Ç¤·¤ç¤¦¤«¡©

| |
|
2014/12/17(Wed) 20:48:46|NO.66494
¥³¡¼¥É¤ò¥¶¥Ã¤È¸Æ¤ó¤À¤À¤±¤Ç¤¹¤¬¡¢ºÆµ¢¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¤è¤Í...?
#deffunc¤ÇÄêµÁ¤·¤¿¥ë¡¼¥Á¥ó¤Ø¤Î¥¸¥ã¥ó¥×¤Ïgosub¤Ë¤è¤ë¥µ¥Ö¥ë¡¼¥Á¥ó¥¸¥ã¥ó¥×¤ÈÂçÂΰì½ï¤Ç¤¹¡£
Ì¿Îá¤ÎÃæ¤«¤é¼«¿È¤ò²¿²ó¤âºÆ¸Æ¤Ó½Ð¤·¤Æ¤¤¤Æ¤Ï¥Í¥¹¥È¤¬¿¼¤¯¤Ê¤Ã¤Æ¡¢HSP¤Ç¤Ï¥¢¥¦¥È¤Ë¤Ê¤ê¤Þ¤¹¡£
Ä󼨤µ¤ì¤¿¥³¡¼¥É¤Ç¤Ï¡¢sublev (¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¥Í¥¹¥È¥ì¥Ù¥ë)¤¬511¤òͤ¨¤¿»þÅÀ¤Ç»à¤ó¤Ç¤¤¤Þ¤·¤¿¡£
ºÆµ¢¤ò»È¤ï¤Ê¤¤ÊýË¡¤ËÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
|
|
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 ¢¤----------------------------*//

| |
|
2014/12/18(Thu) 20:36:08|NO.66498
ÊÖ¿®ÃÙ¤¯¤Ê¤ê¤¹¤ß¤Þ¤»¤ó¡£
¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡ª¡¡¤È¤Æ¤â»²¹Í¤Ë¤Ê¤ê¤Þ¤·¤¿¡ª
¤Á¤ç¤Ã¤ÈÍý²ò¤¬Æñ¤·¤¤¤Ç¤¹¤¬¡¢¤Ê¤ó¤È¤«¤Ç¤¤½¤¦¤Ç¤¹¡£
²ò·èºÑ¤ß¤Ë¤·¤Æ¤ª¤¤Þ¤¹¡£
|
|
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
¾¯¡¹Ä¹¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¤¬¡¢»²¹Í¤Ë¤Ê¤ì¤ì¤Ð¹¬¤¤¤Ç¤¹¡£

| |
|