このディレクトリの索引
#  
#  ならびの中央値
#  

中央値(L,_中央値) :-
        整列(L,L1),
        length(L,_要素数),
        Div_2 is _要素数 // 2,
        Mod_2 is _要素数 mod 2,
        中央値(L1,Div_2,Mod_2,_中央値).

中央値(L,Div_2,1,_中央値) :-
        nth0(Div_2,L,_中央値).
中央値(L,Div_2,0,_中央値) :-
        nth1(Div_2,L,_値_1),
        nth0(Div_2,L,_値_2),
        _中央値 is (_値_1 + _値_2) / 2.

整列([],[]).
整列([_軸要素|R],L2) :-
        分割(_軸要素,R,_軸要素に等しいか小さい要素ならび,_軸要素より大きい要素ならび),
        整列(_軸要素に等しいか小さい要素ならび,_整列した軸要素に等しいか小さい要素ならび),
        整列(_軸要素より大きい要素ならび,_整列した軸要素より大きい要素ならび),
        append(_整列した軸要素に等しいか小さい要素ならび,[_軸要素|_整列した軸要素より大きい要素ならび],L2).

分割(_,[],[],[]).
分割(_軸要素,[_値|R1],[_値|R2],R3) :-
        _値 @=< _軸要素,
        分割(_軸要素,R1,R2,R3).
分割(_軸要素,[_値|R1],R2,[_値|R3]) :-
        _値 @> _軸要素,
        分割(_軸要素,R1,R2,R3).