• ベストアンサー

クイックソート

#include<stdio.h> #include<stdlib.h> #define MAX 10 int comp(const void *i,const void *j); int main(void) { int sort[MAX], i ; for(i=0 ; i<MAX ; i++){ sort[i] = rand(); } qsort(sort, MAX, sizeof(int), comp); for( i=0; i<MAX ; i++) printf("%d\n", sort[i]); return 0; } int comp (const void *i, const void *j) { return *(int*)i - *(int*)j; } これはクイックソートのプログラムなのですが、 int comp (const void *i, const void *j) { return *(int*)i - *(int*)j; } この部分がわかりません。ここでソートしているのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

#1 の補足ですが, qsort の 4番目の引数は「2つの値を比較する」関数であり, 前の値が後の値より大きければ正の値を, 後の値の方が大きければ負の値を, そして 2つの値が同じであれば 0 を返す必要があります. そして, qsort が終わったときには「どの連続する 2つの要素に対してもこの関数の返り値が正にならない」ように配列されます.

morumomo
質問者

補足

全ての要素を比較するためにiやjの値をコントロールしているのはどの部分ですか?

その他の回答 (2)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.3

> 全ての要素を比較するためにiやjの値をコントロールしているのはどの部分ですか? qsort(sort, MAX, sizeof(int), comp); の部分です。 qsort()という標準関数の中で、すべてやってしまっています。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

Cに添付されているqsortでは、2つの要素の大小を比較する関数を引数として渡す必要が有ります。 ご質問の comp は,qsortに渡すための、「二つの要素の大小を比較する」関数かと。

関連するQ&A