2009-04-30 glibcのqsort()はクイックソートではない Programming C クイックソートの最悪ケースの実証しようかなーと思ってglibcのソースを見たらクイックソートじゃなかった。まだちゃんとは読んでないが、次のような仕様ではないかと思われる。 まず、必要な一時領域のサイズを決定する。 通常は元の配列と同じ。(nmemb * size) sizeが32bytesより大きい場合は間接ソートを行うので、2*nmemb*sizeof(void*)+s必要。 一時領域を確保する。 一時領域が1024bytesより小さい場合はスタックから確保(alloca)する。 そうでなければmallocを試みる。 必要量がページサイズの1/4以上であるか、mallocに失敗した場合は、一時領域を必要としないクイックソートに切り替える。 一時領域の確保に成功したら、マージソートを行う。 glibcのソースのstdlib/msort.cより。