C语言执行环境(断言,排序查找)

库文件<stdlib.h> 终止执行函数

void abort( void )  用于不正常的终止一个正在执行的程序

void atexit( void (func) ( void ));  把一个函数注册为退出函数,当程序正常退出时会调用这个函数,退出函数不接受任何参数

void exit(int status) ;正常终止程序,main函数返回一个值等于用这个值作为参数调用这个函数

 

<assert.h> 断言

void  assert(int expression); 

一个宏,若表达式为假,则打印诊断信息并终止程序。在源文件中添加定义 #define NDEBUG 预处理器将丢失所有的断言,而不必实际删除断言代码,减少开销

 

<stdlib.h> 排序查找

void qsort(void *base,size_t n_elements,size_t el_size, int (*compare)(void const *,void const *))

第一个参数是排序数组的指针,第二个是元素个数,第三个是元素的长度,字节为单位,第四个是一个函数指针,因此qsort是一个回调函数。

int compare(void const * a,void const * b){
    return ((type*)a)->key > ((type*)b)->key;

函数返回一个整数,大于0,等于0,小于0,分别表示第一个参数大于等于小于第二个参数

对于任何类型的都可以进行比较

typedef struct{
    int d1;
    string d2;
}Data;

int compare(void const *a,void const *b){
    return (((Data*)a)->d1 == ((Data*)b)->d1) ?  
            strcmp(((Data*)a)->d2 > ((Data*)b)->d2)) : 
            (((Data*)a)->d1 > ((Data*)b)->d1);
}

Data record[100];
/*
** 对record进行初始化
*/
qsort(record,100,sizeof(Data),compare);

Data key;//对key初始化
Data *ans;

//查找key,返回到ans中
ans = bsearch(&key,record,100,sizeof(Data),compare);

对结构体data,先用第一个成员比较,如果相等再用第二个成员比较。

在排序好的数组中用二分法查找一个特定的元素

void *bsearch(void const *key, void const* base,size_tn_elements,size_t el_size, 
                int (*compare)(void const*,void const*));

第一个指向查找的值,第二个指向查找的数组,第三个元素数目,第四个每个元素的长度(单位为字节)最后一个是与qsort中相同的指向比较函数的指针。如果找到,返回指向数组元素的指针,如果没找到返回NULL.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值