如何使用C語(yǔ)言庫(kù)函數(shù)qsort對(duì)數(shù)組進(jìn)行排序
1. 函數(shù)使用語(yǔ)法C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)提供了一個(gè)重要的排序函數(shù)qsort給C語(yǔ)言使用者使用。qsort函數(shù)將快速排序的算法封裝起來(lái),能夠?qū)Σ煌愋吞峁┛焖俚呐判?,其時(shí)間復(fù)雜度為O(nlog n)。qsort
1. 函數(shù)使用語(yǔ)法
C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)提供了一個(gè)重要的排序函數(shù)qsort給C語(yǔ)言使用者使用。qsort函數(shù)將快速排序的算法封裝起來(lái),能夠?qū)Σ煌愋吞峁┛焖俚呐判颍鋾r(shí)間復(fù)雜度為O(nlog n)。qsort函數(shù)的使用語(yǔ)法如下:
```c
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
```
該語(yǔ)法比較抽象,下面將提供具體的實(shí)例來(lái)展示具體的使用方法。
2. 頭文件
為了避免麻煩,我們可以使用萬(wàn)能頭文件`include
3. 比較函數(shù)
比較函數(shù)是qsort函數(shù)中非常重要的一部分。比較函數(shù)的形式如下:
```c
int compare(const void *a, const void *b)
```
返回值的意義:
- 返回值小于0:a所在位置排在b的前面
- 返回值大于0:a所在位置排在b的后面
4. 一個(gè)比較函數(shù)例子
下面給出一個(gè)遞減排序的比較函數(shù)例子:
```c
int compare1(const void *a, const void *b){
int *p1 (int*)a;
int *p2 (int*)b;
return (*p2 - *p1);
}
```
另外,如果要實(shí)現(xiàn)遞增排序,則只需要改變比較函數(shù)的返回值即可:
```c
int compare2(const void *a, const void *b){
int *p1 (int*)a;
int *p2 (int*)b;
return (*p1 - *p2);
}
```
5. 對(duì)數(shù)組進(jìn)行排序
接下來(lái)我們將使用qsort函數(shù)對(duì)數(shù)組進(jìn)行排序。假設(shè)有一個(gè)整型數(shù)組`int p[] {3, 4, 2, 1, 5}`,我們調(diào)用qsort函數(shù)進(jìn)行排序:
```c
qsort(p, n, sizeof(int), compare1);
```
這里的第一項(xiàng)是數(shù)組名,第二項(xiàng)是數(shù)組元素的數(shù)量,第三項(xiàng)是每一項(xiàng)的空間大小,第四項(xiàng)是比較函數(shù)。
6. 總的程序
下面是一個(gè)完整的程序示例:
```c
include
using namespace std;
int compare1(const void *a, const void *b){
int *p1 (int*)a;
int *p2 (int*)b;
return (*p1 - *p2);
}
int main(){
int p[] {3, 4, 2, 1, 5};
int n sizeof(p)/sizeof(int); // 數(shù)組元素的數(shù)量
qsort(p, n, sizeof(int), compare1);
cout<<"sorted array: ";
for (int i0; i cout< } return 0; } ``` 通過以上代碼,我們可以使用C語(yǔ)言的qsort函數(shù)對(duì)數(shù)組進(jìn)行排序,并輸出排序后的結(jié)果。