このディレクトリの索引
c166-940#

このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1381909900/940
#  [1] 授業単元:アルゴリズム概論 
#  ヒープソートについての課題です 
#   
#  [2] 問題文 
#  以下のプログラムは、整列する配列の添え字の下限が1であることを仮定している. 
#  この過程を除いたプログラムを書け. 
#  すなわち、整列する範囲の下限、上限ともに可変とした場合のヒープソートの手続きを書け。 
#  ソースコード: http://ime.nu/ideone.com/HOlaTT 
#  

引数に整列した木を形成する(_整列対象となるならび,_整列木) :-
        _整列対象となるならび = [_最初の要素|R],
        引数に整列した木を形成する(R,(_最初の要素,_,_),_整列木).

引数に整列した木を形成する([],_木,_木) :- !.
引数に整列した木を形成する([A|R],_木_1,_木) :-
        木に挿入する(A,_木_1,_木_2),
        引数に整列した木を形成する(R,_木_2,_木).

木に挿入する(A,_枝,(A,_,_)) :-
        var(_枝),!.
木に挿入する(A,(_葉,_左枝,_右枝_1),(_葉,_左枝,_右枝_2)) :-
        A @>= _葉,
        木に挿入する(A,_右枝_1,_右枝_2).
木に挿入する(A,(_葉,_左枝_1,_右枝),(_葉,_左枝_2,_右枝)) :-
        A @< _葉,
        木に挿入する(A,_左枝_1,_左枝_2).


整列した木から整列順に要素を取り出す((_葉,_左枝,_右枝),_要素) :-
        \+(var(_左枝)),
        整列した木から整列順に要素を取り出す(_左枝,_要素).
整列した木から整列順に要素を取り出す((_葉,_,_),_葉).
整列した木から整列順に要素を取り出す((_葉,_左枝,_右枝),_要素) :-
        \+(var(_右枝)),
        整列した木から整列順に要素を取り出す(_右枝,_要素).