C言語のライブラリ関数 qsort 関数の使用について

2017/4/10 更新

stdlib.hで定義されている関数、

#include <stdlib.h>
void qsort( void * data, size_t data_cnt, size_t data_size, int( * func )( const void * , const void * );
を使って、この関数に 「ソースしたい配列データ」と「ソートの際の比較のための関数へのポインタ func 」 を渡せば、(おそらく)クィックソートが行えるので是非使ってください。 (注意:qsort 関数の名前はクイックソート (quick sort) に由来しますが, 内部でクイックソートアルゴリズムを使用してる保障はありません.(処理系定義))

比較のための関数のルールとしては

を満たしている必要があります。

たとえば、ソースコードとして

#include <stdio.h> #include <stdlib.h> #define N 8 int comp(const void *a, const void *b){ return *(int*)a - *(int*)b; } main(){ int data[N] = {1, 8, -9, 5, 2, 10, 9, 3}; int i; for (i = 0; i < N; i++) printf("%3d", data[i]); printf("\n"); qsort(data, N, sizeof(int), comp); for (i = 0; i < N; i++) printf("%3d", data[i]); printf("\n"); }
とすると,int型の配列 data を昇順でソートすることができる。