使用<stdlib.h>里的bsearch和qsort,比较函数的基本写法
1,确定被比较对象的顺序关系;
2,比较函数总用两个const void* 参数;
3,在函数开始时将参数正确转换到指向数组元素类型的指针;
4,在第一个参数大于、等于、小于第二个时分别返回1、0、-1;
5,注意使用方式。
---------------------------------------------------
例子:假定被排序的是整数数组。定义比较函数:
int icmp(const void *p, const void *q){
const int *m = p, *n = q;
return *m > *n ? 1 : (*m == *n ? 0 : -1);
}
使用:
int *p, a[] = {5, 6, 3, 28, 23, 34, 7, 9, 6, 14}, k = 7;
int main () {
... ...
qsort(a, sizeof(a)/sizeof(int), sizeof(int), icmp);
/* 这样,数组a的元素已经按照上升顺序排列好了 */
p = bsearch(&k, a, sizeof(a)/sizeof(int), sizeof(int), icmp);
/* 指针p将指向数组a中元素7的位置 */
... ...
}
1,确定被比较对象的顺序关系;
2,比较函数总用两个const void* 参数;
3,在函数开始时将参数正确转换到指向数组元素类型的指针;
4,在第一个参数大于、等于、小于第二个时分别返回1、0、-1;
5,注意使用方式。
---------------------------------------------------
例子:假定被排序的是整数数组。定义比较函数:
int icmp(const void *p, const void *q){
const int *m = p, *n = q;
return *m > *n ? 1 : (*m == *n ? 0 : -1);
}
使用:
int *p, a[] = {5, 6, 3, 28, 23, 34, 7, 9, 6, 14}, k = 7;
int main () {
... ...
qsort(a, sizeof(a)/sizeof(int), sizeof(int), icmp);
/* 这样,数组a的元素已经按照上升顺序排列好了 */
p = bsearch(&k, a, sizeof(a)/sizeof(int), sizeof(int), icmp);
/* 指针p将指向数组a中元素7的位置 */
... ...
}