課題メモ
課題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:工シス環境だとどうかはしらん...