マージソート(笑)
forked from バブルソート(笑) (diff: 34)
4回笑ってみたらマージソートになりましたw (シリーズ化しても需要無いとか言わないで!) バブルソートほど単純じゃないから関数多くなっちゃったなー ほんとは var stack:Array=[]; じゃなくてバーチャルマシンのスタックをこっそり操作(http://wonderfl.net/c/kNtG)してどこで再帰してるのかわからないコードにしたかったけど断念。
ActionScript3 source code
/**
* Copyright 12346 ( http://wonderfl.net/user/12346 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/w6Z1
*/
package{import flash.display.*;
public class MergeSort extends Sprite{
public function MergeSort(){
addChild(T).width=T.height=465;
A=[5,6,1,7,4,8,3,2,9];
b=A.length;
print(A);
print("\n---sort start---");
while(笑)(笑)(笑)(笑);
print("---sort end---\n");
print(A);
}
}}
var A:Array,B:Array=[],a:int,b:int,c:int=0,d:int,f:Function,g:Function,笑:Function=G;
function F():Function{return a<b?f:g}
function G():Function{f=H;g=I;笑=F;a=1;return J;}
function H():void{d=b>>1;push3(K,c,b);push3(G,c+d,b-d);b=d;}
function I():void{b=pop();c=pop();笑=pop();}
function J():void{}
function K():Function{print(A+" -> Merge "+c+" to "+(c+b-1));g=M;笑=F;a=0;d=b;b>>=1;return f=L;}
function L():void{B[a]=A[c+b-++a];}
function M():void{f=N;g=O;b=d;}
function N():void{B[a]=A[c+a++];}
function O():void{f=P;g=I;a=0;}
function P():void{A[c+--d]=B[B[a]<B[b-1]?--b:a++];}
import flash.text.*;
var T:TextField=new TextField;
function print(s:*):void{T.appendText(String(s)+"\n");}
var stack:Array=[],p:int=3;
function pop():*{return stack[--p];}
function push(_:*):void{stack[p++]=_;}
function push3(x:*,y:*,z:*):void{push(x);push(y);push(z);}
