このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 131代目 #565 # [1] 授業単元:C言語プログラミング # [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10062.txt マージソート([],[]) :- !. マージソート([A],[A]) :- !. マージソート(L,LX) :- ならびを半分に分割する(L,L1,L2), マージソート(L1,L11), マージソート(L2,L22), 併合する(L11,L22,LX). 併合する(L,[],L) :- !. 併合する([],L,L) :- !. 併合する([A|R1],[B|R2],[A|R3]) :- A @< B, 併合する(R1,[B|R2],R3). 併合する([A|R1],[B|R2],[B|R3]) :- A @>= B, 併合する([A|R1],R2,R3). ならびを半分に分割する(L,L1,L2) :- ならびを半分に分割する(L,L,[],[],L1,L2). ならびを半分に分割する(L,L0,LX,LY,LX,LY) :- append(LX,LY,L0),!. ならびを半分に分割する(L,L0,LX,LY,LX,[A|LY]) :- append(LX,[A|LY],L0),!. ならびを半分に分割する([A,B|R1],L0,LX,LY,L1,L2) :- ならびを半分に分割する(R1,L0,[_|LX],[_|LY],L1,L2).