函数声明:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
参数:
-
base-- 指向要排序的数组的第一个元素的指针。
-
nitems-- 由 base 指向的数组中元素的个数。
-
size-- 数组中每个元素的大小,以字节为单位。
-
compar-- 用来比较两个元素的函数,即函数指针(回调函数)
compar参数:
- 函数原型:int compar(const void *p1, const void *p2);
- 如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左边
- 如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
- 如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面
要升序排列还是降序排列,关键是对compar参数的处理
- 一维数组(升序):
int cmp(const void*ptr1, const void*ptr2) { return *((int*)ptr1) > *((int*)ptr2); }
-
若要降序,改成"<"即可
-
二维数组(按左边界升序):
-
升序前:points = [[3,4],[1,2],[7,8],[5,6]]
-
升序后:points = [[1,2],[3,4],[5,6],[7,8]]
-
int cmp(const void *a,const void *b) { return ((*((int**)a))[0] > (*((int**)b))[0]); }