qsort
void qsort( void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *) );
compare参数:
如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的前面
如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定
如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的后面
例子:
/* qsort example */ #include <stdio.h> /* printf */ #include <stdlib.h> /* qsort */ int values[] = { 40, 10, 100, 90, 20, 25 }; int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int main () { int n; qsort (values, 6, sizeof(int), compare); // 直接改变了数组内部的值 for (n=0; n<6; n++) printf ("%d ",values[n]); return 0; }
如果a小于b,则返回值为负数(< 0),也即a会排在b的前面。同理,若a大于b,则a会排在b的后面。所以,这里的qsort()为从小到大即升序排序。因此,运行结果为:10 20 25 40 90 100
注意:
修改compar(),使qsort()为降序排序
很简单,只要将上面compare()中的
return ( *(int*)a - *(int*)b );
改为:
return ( *(int*)b - *(int*)a );
即可