目次から探す
標準ライブラリのqsort関数
qsort関数の概要
qsort関数
は、C言語の標準ライブラリに含まれるソート関数です。
この関数を使用することで、配列や構造体などの要素をソートすることができます。
qsort関数
はクイックソートアルゴリズムを使用しており、高速なソートが可能です。
qsort関数の使い方
配列のソート
qsort関数
を使用して配列をソートする方法を説明します。
まず、ソートしたい配列を用意します。
次に、qsort関数
を呼び出し、以下のような形式で引数を指定します。
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
- base: ソートする配列の先頭要素へのポインタ
- nmemb: 配列の要素数
- size: 配列の要素のサイズ
- compar: 比較関数へのポインタ
以下は、整数型の配列を昇順にソートする例です。
#include <stdio.h>
#include <stdlib.h>
// 比較関数
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
printf("ソート結果: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
ソート結果: 1 2 5 8 9
構造体のソート
qsort関数
を使用して構造体をソートする方法を説明します。
構造体のソートでは、比較関数を適切に実装する必要があります。
以下は、構造体のメンバでソートする例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 構造体の定義
typedef struct {
char name[20];
int age;
} Person;
// 比較関数
int compare(const void *a, const void *b) {
return strcmp(((Person*)a)->name, ((Person*)b)->name);
}
int main() {
Person people[] = {
{"Alice", 25},
{"Bob", 30},
{"Charlie", 20}
};
int n = sizeof(people) / sizeof(people[0]);
qsort(people, n, sizeof(Person), compare);
printf("ソート結果:\n");
for (int i = 0; i < n; i++) {
printf("名前: %s, 年齢: %d\n", people[i].name, people[i].age);
}
return 0;
}
ソート結果:
名前: Alice, 年齢: 25
名前: Bob, 年齢: 30
名前: Charlie, 年齢: 20
ソートの基準を指定する
qsort関数
では、比較関数を使用してソートの基準を指定することができます。
比較関数は、ソートの基準に応じて適切に実装する必要があります。
以下は、降順でソートする例です。
#include <stdio.h>
#include <stdlib.h>
// 比較関数
int compare(const void *a, const void *b) {
return (*(int*)b - *(int*)a);
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
printf("ソート結果: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
ソート結果: 9 8 5 2 1
次のページqsort関数の注意点