Day 5 第六讲 C排序API
qsort
排序api qsort调用
void qsort(void *base,
size_t nitems,
size_t size,
int (*compar)(const void *, const void*));
base 指向 要排序的数组 的 第一个元素 的 指针 nitems 由base指向的数组中 元素的个数 size 数组中每个元素的大小,以字节为单位 compar 用来比较两个元素的函数,即函数指针,比较算法的回调函数 举例
对于如下无序数组调用排序api
int a[5] = {4, 5, 3, 2, 1};
qsort(a, 5, sizeof(int), cmp);
sizeof(int) 单个数组元素的字节数 5 数组大小 总字节数 两者乘积 cmp 比较函数,决定递增还是递减
比较函数
int compar(const void *p1, const void *p2);
如果 compar 返回值 小于 0,则p1所指向元素 会被排在 p2所指向元素的左面 如果 compar 返回值 等于 0,则p1所指向元素 与 p2所指向元素顺序不确定 如果 compar 返回值 大于 0,则p1所指向元素 会被排在 p2所指向元素的右面
举例:递增排序
int cmp(const void*p1, const void *p2) {
int v1 = *(int *)p1;
int v2 = *(int *)p2;
if(v1 < v2) {
return -1;
}else if(v1 > v2) {
return 1;
}
return 0;
}
想法
感觉就是 先设定排序的方法(正序,逆序,奇偶数),然后在排序代码中调用这个方法,排序代码块指定了数组,数组元素个数,和数组内存
今日习题
LC 912 排序数组
LC 169 多数元素
LC 217 存在重复数组
LC 164 最大间距
LC 905 按奇偶排序数组
LC 539 最小时间差
LC 976 三角形的最大周长
LC 881 救生艇
|