膨大な要素を持つ配列の上位数個を取り出してソートしたい時、
例えば、トップ10を抽出したいとき、全要素をソートして上位を
取り出すのは効率が悪いですよね。

void qsort(void *base, size_t nmemb, size_t size,
 int (*compar)(const void *, const void *));

に習い、

void topsort(void *base, size_t nmemb, size_t top, size_t size,
 int (*compar)(const void *, const void *));
※ただし、top は抽出したい要素の個数とする

という関数を(考えうる最高の実行速度になるように)書いてください。