課題メモ

goth_wrist_cut2008-01-31

課題61

./a.out arg1 arg2 ...
の時、argをアルファベット順にソーティングするquicksortのプログラムを作る。

課題62

課題61に於いて、ライブラリ関数qsort()を用いる。
qsort( void* base, int n_elem, int size, int (*compare)(void*, void*) )
base: 配列のアドレス。
n_elem: 要素数
size: 一要素のサイズ
compare: 比較に使う関数。

課題63

ライブラリ関数と同じ動きをする関数
msort( ...qsortと同じ引数... )
を作る。(当然アルゴリズムクイックソート
関数と、その関数で使用されるグローバル変数のみ提出
main()やら#includeは含まない。



えっと、補足すると、
"int (*compare)(void*, void*)"
↑これ、たぶん所見だと思う。
というか情報学類生の大半も多分わからないと思う(たしか習ってへん。
「関数ポインタ」とかいうはず。


とりあえず、利用する上では、

int mycmp( void* item1, void* item2 ) {
        return /*なにか*/
}

的な関数をつくって、この関数の名前"mycmp"をqsortの第四引数にあたえればおっけーです。

えっと、先生もいってましたが、詳細は
man 3 qsort
で調べてみてください。多分英語ですが。*1


"int (*compare)(void*, void*)"
↑これの読み方ですが、まず、この引数の名前はcompareという名前。
つまり、baseやらn_elemやらsizeとおんなじ。
で、baseは型は"void*"って感じでわかりやすくかいてあるんだけど、こいつの型は
「void*とvoid*を引数にとってintを返す関数」です。


#haskell的には void* -> void* -> int かなw

詳しくは後ほどー。(とかいって書かないとかね...苦笑

*1:工シス環境だとどうかはしらん...