61章 標準ソート関数 qsort

http://www.geocities.jp/ky_webid/c/061.html

qsort(対象配列,配列全体のサイズ,一要素のサイズ,ソート関数ポインタ)

このような定義になっている。

第四引数に渡す関数ポインタは

int 関数名(const void*, const void*);

となっている。

strcmpと同じで正、負、0のいずれかを返すような処理にすればよいということになる。

実際に使ってみる。

#include <stdio.h>
#include <stdlib.h>
#define ARRAYNUM(a) (sizeof(a)/sizeof(a[0]))

int cmpint (const void *a, const void *b) {
    return *(int *)a - *(int *)b;
}

int main (void) {
    int num[] = {4,7,1,9,6,5,2};
    int i;
    
    qsort(num,ARRAYNUM(num),sizeof(int),cmpint);
    
    for(i=0;i<ARRAYNUM(num);++i) {
        printf("%d ",num[i]);
    }
    
    return 0;
}
$ main
1 2 4 5 6 7 9

ちなみにaとbの引き算を逆にすれば逆順にソートされます。