このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 129代目 #604 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9849.txt # 配列を引数とする再帰呼び出しによるマージソート # #  入出力配列を引数とする再帰的手続きを作成し、マージソートを実現せよ。 # ただし、各入力要素X[i]は整数値をとるものとする。関数として、 # 長さnの配列Xをマージソートによって小さい順に並べ替えた配列Yを求める # msort(int X[],int n,int Y[]),すでに並べ替えられている長さn1の配列Y1と長さn2の # 配列Y2を併合した配列Yを求めるmerge(int Y1[],int n1,int Y2[],int n2,intY[]), # 長さnの配列Xの各要素のアドレス、ならびに内容を # 表示するshow_addr(int X[],int n)を用意する。 debug(off). msort([],[]). msort([X],[X]). msort(_ならび,_整列されたならび) :- ならびを分割(_ならび,_ならび1,_ならび2), show_list(分割,[_ならび,_ならび1,_ならび2]), msort(_ならび1,_整列されたならび1), show_list(msort,[ならび1,_整列されたならび1]), msort(_ならび2,_整列されたならび2), show_list(msort,[ならび2,_整列されたならび2]), merge(_整列されたならび1,_整列されたならび2,_整列されたならび), show_list(merge,[_整列されたならび1,_整列されたならび2,_整列されたならび]). ならびを分割([],[],[]). ならびを分割([X],[X],[]). ならびを分割([A,B|R1],[A|R2],[B|R3]) :- ならびを分割(R1,R2,R3). merge([],X,X) :- !. merge(X,[],X) :- !. merge([A|R1],[B|R2],[A|R3]) :- A @< B,merge(R1,[B|R2],R3). merge([A|R1],[B|R2],[B|R3]) :- A @>= B,merge([A|R1],R2,R3). show_list(_,_) :- debug(off). show_list(_述語,_ならびのならび) :- debug(on),write_formatted('%t: %t\n',[_述語,