//クイックソートの最悪パターンを回避
for (i=0;i<NUM;i++) //乱数を埋め込む
data[i]=(data[i]<<16)+ (rand() & 0xffff);
qsort(data,NUM,sizeof(data[0]),comp);
for (i=0;i<NUM;i++) //データを元のビット位置に戻す
data[i]=data[i]>>16;
/*このように、クイックソートを呼び出す前に、データを上にシフトして空いた下位ビットに乱数を埋め込んでおけば、
データに同じ値がたくさん入っているような最悪パターンでもマージソートよりも高速にソートできます。
 ただし、乱数のために数倍メモリを食います。*/