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

中央値(_ならび,_中央値) :-
        整列(_ならび,_整列済みならび),
        length(L0,_同じ要素数),
        length(R,_同じ要素数),
        中央値(_整列済みならび,L0,R,_中央値),!.

中央値(_整列済みならび,L0,R,_中央値) :-
        append(L0,[_中央値_1,_中央値_2|R],_整列済みならび),
        _中央値 is (_中央値_1 + _中央値_2) / 2.
中央値(_整列済みならび,L0,R,_中央値) :-
        append(L0,[_中央値|R],_整列済みならび).



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

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