Mac上のC++でさまざまなソートアルゴリズムを示すプログラムを作成する。 qsortとqsort_bという2つのクイックソートの実装が見つかりました。qsort_bとqsort
最初のものは当然のことながら、昔ながらの、どこでも見られます。しかしqsort_bは関数ではなくブロックをとります。私のコードは以下の通りです:
ここで私は大きな違いがあり、その違いを引き起こしています。私の理解では、ブロックは並列処理のためのものであり、この場合、関数より高速ではありません。並列処理には何もありません。
EDIT:heapsort_b()、mergesort_b()、およびqsort_b()ルーチンは、_b接尾辞を持たない対応ルーチンと同じですが、比較コールバックは関数ポインタではなくブロックポインタであると考えられます。 (FROM BSD MAN PAGE)
EDIT:スピードの違い。 DATAが1000000の場合、qsortは146832 nsで終了し、qsort_bは127391 nsで終了します。それは約10%速いと考えると比較的大きな違いです。
EDIT:さらに大きな整数配列を作成できるようにコードを編集しました。私の個人的な最大のテスト結果は、28136278(28s)対23870078(24s)の100000000の整数です。それは私にとってかなり大きな違いです。
あなたは "大きなスピードの違い"を練ることができます –
@KarthikT私は測定装置では分かりませんが、ナノ秒だと思います。 qsortでは146832、qsort_bでは127391です。DATAは1000000です。 –
私はこれまでより大きいデータ、100000000の整数でテストしました。 28136278(28秒)対23870078(24秒)です。それは私にとってかなり大きな違いです。 –