このディレクトリの索引
#  ホーアのアルゴリズムによる整列(quicksort)
#  


ホーアのアルゴリズムによる整列([],[]).
ホーアのアルゴリズムによる整列(_リスト,_整列済みリスト) :-
        軸要素と一つの軸要素を取り除いたリストに分解(_リスト,_軸要素,_一つの軸要素を取り除いたリスト),
        軸要素に小さいか等しい要素の整列済みリストと大きい要素の整列済みリストを作る(_軸要素,_一つの軸要素を取り除いたリスト,_軸要素より小さいか等しい要素の整列済みリスト,_軸要素より大きい要素の整列済みリスト),
        軸要素より小さいか等しい要素の整列済みリストと軸要素と軸要素より大きい要素の整列済みリストを結合する(_軸要素より小さいか等しい要素の整列済みリスト,_軸要素,_軸要素より大きい要素の整列済みリスト,_整列済みリスト).


軸要素と一つの軸要素を取り除いたリストに分解(_リスト,_軸要素,_一つの軸要素を取り除いたリスト) :-
        _リスト = [_軸要素|__一つの軸要素を取り除いたリスト].


軸要素に等しいかより小さい要素の整列済みリストと大きい要素の整列済みリストを作る(_軸要素,_軸要素を一つ取り除いたリスト,_軸要素より小さいか等しい要素の整列済みリスト,_軸要素より大きい要素の整列済みリスト) :-
        軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_軸要素,_軸要素を一つ取り除いたリスト,_軸要素より小さいか等しい要素のリスト,_軸要素より大きい要素のリスト),
        ホーアのアルゴリズムによる整列(_軸要素より小さいか等しい要素のリスト,_軸要素より小さいか等しい要素の整列済みリスト),
        ホーアのアルゴリズムによる整列(_軸要素より大きい要素のリスト,_軸要素より大きい要素の整列済みリスト).


軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_,[],[],[]).
軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_軸要素,[_要素|R],[_要素|R1],R2) :-
        軸要素より小さいか等しい(_要素,_軸要素),
        軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_軸要素,R,R1,R2).
軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_軸要素,[_要素|R],R1,[_要素|R2]) :-
        軸要素より大きい(_要素,_軸要素),
        軸要素より小さいか等しい要素のリストと大きい要素のリストに分類する(_軸要素,R,R1,R2).


軸要素より小さいか等しい(_要素,_軸要素) :-
        _要素 @=< _軸要素.


軸要素より大きい(_要素,_軸要素) :-
        _要素 @> _軸要素.


軸要素より小さいか等しい要素の整列済みリストと軸要素と軸要素より大きい要素の整列済みリストを結合する(_軸要素より小さいか等しい要素の整列済みリスト,_軸要素,_軸要素より大きい要素の整列済みリスト,_整列済みリスト) :-
        append(_軸要素より小さいか等しい要素の整列済みリスト,[_軸要素|_軸要素より大きい要素の整列済みリスト],_整列済みリスト).