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; } |