このディレクトリの索引
#  
#  @haroperiさんの20120420のツイートより
#  
#  双方向性のあるQuicksortが書けないので寝るです。だめだもうだめだ。 *喪中*
#  

双方向性のあるQuicksort(L1,L2) :-
        最初にL1とL2の要素数を揃える(L1,L2),
        双方向クイックソート(L1,L2).

双方向クイックソート([],[]).
双方向クイックソート([A|R1],L2) :-
        双方向クイックソート(A,R1,L2).

双方向クイックソート(A,L1,L2) :-
        append(L5,[A|L6],L2),
        双方向性のあるQuicksort(L3,L5),
        双方向性のあるQuicksort(L4,L6),
        整列のための分割(A,L1,L3,L4).

整列のための分割(A,[],[],[]).
整列のための分割(A,[B|R1],[B|R2],L) :-
        B @< A,
        整列のための分割(A,R1,R2,L).
整列のための分割(A,[B|R1],L,[B|R2]) :-
        B @>= A,
        整列のための分割(A,R1,L,R2).

最初にL1とL2の要素数を揃える(L1,L2) :-
        length(L1,Len),
        length(L2,Len),!.


%  
%  最初に要素数を揃えてしまうため、重複解を許さない(集合)仕様ではうまく行かない
%
%  双方向クイックソート/3の中で 双方向性のあるQuicksort/3 を呼ぶ。
%  私はここで 双方向クィックソート/3 を呼んでしまったので最初失敗した。
%