このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/347
#  [1] 授業単元:整列処理 
#  [2] 問題文(含コード&リンク): http://codepad.org/afHWYPLF 
#  問題が3問あります。長いので問題文もリンク先に書かせていただきました。  
#  
#  【問題3】
#  クイックソートプログラムとバブルソートプログラムについて、同一のデータについて実行時間を測定して
#  比較し考察せよ。データ数が、5千個、1万個、2万個、4万個、8万個の5つの場合について、それぞれ実行時間を計測する。
#  <注意>比較、交換の回数を計数するプログラムは削除する事。
#  実行時間の測定はclock関数を使用すればよい。使用方法は図6に示すとおり。ただし<time.h>をインクルードすること。
#  
#  レポートには以下のものを添付する事。
#  (1)クイックソートプログラムと実行時間を測定するプログラムを追加したmain関数のプログラムリスト
#  (2)バブルソートプログラムと実行時間を測定するプログラムを追加したmain関数のプログラムリスト
#  (3)両プログラムの実行結果(実行時間)
#  (4)実行結果に関する考察
#  
#  図6
#  clock関数の使用例
#  #include
#  void main()
#  {
#     int i;
#     int a[]={10,9,8,7,6,5,4,3,2,1};
#     time_t  start,end;
#     start=clock();
#     quick_sort(a,0,NUM-1);
#     end=clock();
#     printf("計算時間は%.3f秒です\n\n",(float)((end-start)/CLOCKS PER SEC);


クイックソートとバブルソートの実行速度比較 :-
        append(_,[[_試行回数,_データ数]|R],[[5000,30],[10000,30],[20000,30],[40000,30],[80000,30],[500,100],[100,100],[200,100],[400,100],[800,100]]),
        クイックソートとバブルソートの実行速度比較(_試行回数,_データ数,_実行時間_1,_実行時間_2),
        writef('データ数=%t,試行回数=%t,クイックソート=%t秒,バブルソート=%t秒\n',[_データ数,_試行回数,_実行時間_1,_実行時間_2]),
        R = [].

クイックソートとバブルソートの実行速度比較(_試行回数,_データ数,_実行時間_1,_実行時間_2) :-
         length(L,_データ数),
         findall(N,(
                     append(_,[_|_],L),
                     N is random(100)),
                _データ),
        クイックソートの実行速度(_試行回数,_データ,_実行時間_1),
        バブルの実行速度(_試行回数,_データ,_実行時間_2),!.

クイックソートの実行速度(_試行回数,_データ,_実行時間) :-
        A is cputime,
        for(1,N,_試行回数),
        quicksort(_データ,_),
        N = _試行回数,
        B is cputime,
        _実行時間 is B - A,!.

バブルの実行速度(_試行回数,_データ,_実行時間) :-
        A is cputime,
        for(1,N,_試行回数),
        バブルソート(_データ,_),
        N = _試行回数,
        B is cputime,
        _実行時間 is B - A,!.

quicksort([X|Xs],Ys) :-
        partition(Xs,X,Littles,Bigs),
        quicksort(Littles,Ls),
        quicksort(Bigs,Bs),
        append(Ls,[X|Bs],Ys).
quicksort([],[]).

partition([X|Xs],Y,[X|Ls],Bs) :-
        X @=< Y,
        partition(Xs,Y,Ls,Bs).
partition([X|Xs],Y,Ls,[X|Bs]) :-
        X @> Y,
        partition(Xs,Y,Ls,Bs).
partition([],Y,[],[]).

バブルソート(_対象ならび,_整列済みならび) :-
        交換(_対象ならび,_対象ならびの一),!,
        バブルソート(_対象ならびの一,_整列済みならび).
バブルソート(_整列済みならび,_整列済みならび).

交換([],[]) :- !,fail.
交換([A,B|R],[B,A|R]) :-
        A @> B,!.
交換([A|R1],[A|R2]) :-
        交換(R1,R2).