qsort()
是C語言標準庫中的一個函數,用于對數組進行快速排序。它位于<stdlib.h>
頭文件中,提供了通用的排序功能,適用于各種數據類型。本文將詳細介紹qsort()
函數的使用方法。
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
base
:指向待排序數組的第一個元素的指針。nmemb
:數組中元素的個數。size
:每個元素的大?。ㄒ宰止潪閱挝唬?。compar
:比較函數的指針,用于確定元素的順序。qsort()
函數需要一個比較函數來定義排序的順序。比較函數的原型如下:
int compar(const void *a, const void *b);
比較函數應返回以下值之一:
- 如果a
小于b
,返回負值。
- 如果a
等于b
,返回0。
- 如果a
大于b
,返回正值。
以下是一個使用qsort()
函數對整數數組進行排序的示例:
#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, 9, 1, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
// 使用qsort排序
qsort(arr, n, sizeof(int), compare);
// 輸出排序后的數組
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
compare
函數將兩個整數指針轉換為int
類型,并返回它們的差值。這確保了數組按升序排列。qsort
:qsort
函數接收數組arr
、元素個數n
、每個元素的大小sizeof(int)
以及比較函數compare
。qsort()
函數也可以用于對結構體數組進行排序。以下是一個示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[50];
int age;
} Person;
// 比較函數:按年齡排序
int compareByAge(const void *a, const void *b) {
return ((Person *)a)->age - ((Person *)b)->age;
}
// 比較函數:按姓名排序
int compareByName(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), compareByAge);
printf("Sorted by age:\n");
for (int i = 0; i < n; i++) {
printf("%s: %d\n", people[i].name, people[i].age);
}
// 按姓名排序
qsort(people, n, sizeof(Person), compareByName);
printf("\nSorted by name:\n");
for (int i = 0; i < n; i++) {
printf("%s: %d\n", people[i].name, people[i].age);
}
return 0;
}
Person
結構體包含name
和age
兩個字段。compareByAge
按年齡排序,compareByName
按姓名排序。qsort
:分別按年齡和姓名對結構體數組進行排序,并輸出結果。qsort()
函數是C語言中一個非常強大的工具,能夠對任何類型的數組進行排序。通過提供適當的比較函數,可以輕松實現升序、降序或自定義排序規則。掌握qsort()
的使用方法,可以大大提高編程效率。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。