#include <stdio.h>

// 2つの要素の大小を比較して, (ソート後の配列で)どちらを先に並べるかを返す関数
int compare(const void * a, const void * b) {
	// qsort は配列の中身が何なのか (int なのか, float なのか, それとも独自のデータ型なのか)
	// が判らないので, とりあえず (void *) 型で渡してくる.
	// こちらはデータの中身が int だと知っているので, ここで int に戻してあげる
	int num1 = *(int *)a;
	int num2 = *(int *)b;
	
	if (num1 < num2) {
		return -1; // ここが 1 だと...?
	} else if (num1 > num2) {
		return 1; // ここが -1 だと...?
	} else {
		return 0;
	}
	
	// 昇順:
	//   num1 < num2  なら -1 を返す (ソート後の配列で, num1 を先に並べたい)
	//   num1 > num2  なら 1 を返す
	//   num1 == num2 なら 0 を返す
	// 降順:
	//   num1 < num2  なら 1 を返す (ソート後の配列で, num2 を先に並べたい)
	//   num1 > num2  なら -1 を返す
	//   num1 == num2 なら 0 を返す
}

int main(int argc, char *argv[]) {
	int array[5] = { 3, 1, 2, 5, 4 }; // int の配列
	
	// ソートする
	qsort((void *)array,    // ソートしたい配列
	      5,                // 配列の要素数
	      sizeof(array[0]), // 配列の1つの要素のサイズ, 今回はintなのでsizeof(int)でも同じ
	      compare);         // 2つの要素の大小比較に使う関数
	
	// ソートした結果を表示
	for (int i = 0; i < 5; i++) {
		printf("%d: %d\n", i, array[i]);
	}
}