qsort 的函数原型是 void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
定义:void __cdecl qsort(void *, size_t, size_t, int (__cdecl *)(const void *, const void *));
1 待排序数组首地址 2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
以下为compare函数原型: compare( (void *) & elem1, (void *) & elem2 );
|
Compare 函数的返回值
|
描述
|
|---|---|
|
< 0
|
elem1将被排在elem2前面
|
|
0
|
elem1 等于 elem2
|
|
> 0
|
elem1 将被排在elem2后面
|
intcompare(const void*a,const void*b){return *(int*)a-*(int*)b;} |
上面是由小到大排序,return *(int *)b - *(int *)a; 为由大到小排序。
对一维数组的排序实例(从小到大排序):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<stdio.h>#include<stdlib.h>int comp(const void*a,const void*b){return *(int*)a-*(int*)b;}int main(){int *array;int n;scanf("%d",&n);array=(int*)malloc(n*sizeof(int));int i=0;for(;i<n;i++){scanf("%d",(array+i));}qsort(array,n,sizeof(int),comp);for(i=0;i<n;i++){printf("%d\t",array[i]);}return0;} |
3万+

被折叠的 条评论
为什么被折叠?



