http://zh.cppreference.com/w/c/algorithm

==========

void qsort( void *ptr, size_t count, size_t size,
int (*comp)(const void *, const void *) );

ptr:指向要排序的数组头部

count:数组中元素的数量

size:数组中每个元素的大小

comp:比较函数。

   如果前者小于后者,返回一个负数值;

   如果前者大于后者,返回一个正数值;

   如果前者和后者相等,返回零。

  比较函数的原型应该,等价于下面的:

int cmp(const void *a,const void *b);

这个函数不能修改 被传递的参数,

当a/b两者的是相同的对象时,返回稳定的结果。consisten result,而不管在数组他们的位置。

例子:

class A{
public:
static int mycmp(const void *a,const void *b){
int arg1 = *(const int *)a;
int arg2 = *(const int *)b;
if(arg1<arg2) return -;
if(arg1>arg2) return ;
return ;
} void test(ListNode *head){
int *a = new int[];
for(int i = ;i<;i++){
a[i] = rand()%+;///1..15
}
for(int i = ;i<;i++){
cout<<a[i]<<" ";
}cout<<endl;
qsort(a,,sizeof(int),mycmp);
for(int i = ;i<;i++){
cout<<a[i]<<" ";
}cout<<endl;
}
};

===

sort中的比较函数cmp在c++中,注意要声明为静态成员(如果是在class类中)函数或者全局函数,不能作为普通成员函数,负责会出错--->qsort invalid use of non-static member function。

因为:非静态成员函数是依赖于具体对象的,而qsort这类函数是全局的,因此无法在qsort中调用非静态成员函数。

静态成员函数或者全局函数是不依赖于具体对象的,可以独立访问,不用创建对象实例就可以访问。

同时,静态成员函数不能调用类的非静态成员。

=========

bsearch

void* bsearch( const void *key, const void *ptr, size_t count, size_t size,
int (*comp)(const void*, const void*) );

要求是有序的,

key,指向查找元素的指针

ptr,指向待查找的数组

count,数组中的元素个数

size,数组中元素的大小

comp,比较函数,与qsort要求的比较函数一样。

返回值:返回一个指针,指向数组中等于*key的元素; 或者返回null,如果没有找到这个数组。

例子:

class A{
public:
static int mycmp(const void *a,const void *b){
return *(int *)a - *(int *)b;
} void test(ListNode *head){
int a[];
for(int i = ;i<;i++){
a[i] = i;
}
int b[] = {,}; int *v = nullptr;
v = (int *)bsearch(b,a,,sizeof(int),mycmp);
cout<<*v<<endl;
}
};

  

stdlib.h中自带的两个算法qsort,bsearch的更多相关文章

  1. Leetcode94. Binary Tree Inorder Traversal二叉树的中序遍历(两种算法)

    给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归: class So ...

  2. c语言实用功能库函数#include<stdlib.h>

    实用函数<stdlib.h> 在头文件<stdlib.h>中说明了用于数值转换.内存分配以及具有其他相似任务的函数. 1 atof #include <stdlib.h& ...

  3. #include <stdlib.h>

    1 _itoa 2 atoi 3 rand() 4 srand 1 _itoa _itoa(int value,char*string,int radix); int value 被转换的整数,cha ...

  4. stdlib.h 头文件

    stdlib 头文件即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldi ...

  5. cstdlib和stdlib.h区别

    一.区别 #include<stdlib.h> :.h是C的习惯 #include<cstdlib> : c开头是C++的习惯 二.stdlib.h是C语言库头文件之一,包含了 ...

  6. C 标准库 - <stdlib.h>

    C 标准库 - <stdlib.h> 简介 stdlib .h 头文件定义了四个变量类型.一些宏和各种通用工具函数. 库变量 下面是头文件 stdlib.h 中定义的变量类型: 序号 变量 ...

  7. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  8. Android网络传输中必用的两个加密算法:MD5 和 RSA

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  9. C++中#include包含头文件带 .h 和不带 .h 的区别

    C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...

随机推荐

  1. pyinstaller打包python源程序访问hive

    1.需求 使用hvie server一段时间后,业务部门需要自己不定时的查询业务数据,之前这一块都是他们提需求我们来做,后来发现这样重复一样的工作放在我们这边做是在没有效率,遂提出给他们工具或者web ...

  2. thinkphp 3.2.3版本学习笔记

    2.开启调试模式,有什么作用?(默认关闭,在ThinkPHP.php 33行左右) (1)非法调用的时候,有详细的报错信息,便于调试 (2)APP_DEBUG为true并且缓存文件存在,走缓存文件,否 ...

  3. 爬虫爬取代理IP池及代理IP的验证

    最近项目内容需要引入代理IP去爬取内容. 为了项目持续运行,需要不断构造.维护.验证代理IP. 为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP. 一.服务器如何获取客户端IP ...

  4. 5-15 笔记 jtopo使用

    Jtopo的核心对象有6个,分别是Stage(舞台对象),Scene(场景对象),Node(节点对象),Link(连线对象),Container(容器对象),Effect.Animate(动画效果) ...

  5. jstree前端设置默认选中项

    $("#jstree").on("loaded.jstree", function (event, data) { var currDeptId = crm.g ...

  6. 【luogu P3608 [USACO17JAN]Balanced Photo平衡的照片】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3608 乍一看很容易想到O(N^2)的暴力. 对于每个H[i]从i~i-1找L[i]再从i+1~n找R[i], ...

  7. 操作系统(3)_CPU调度_李善平ppt

    不只上面的四种,比如时间片到了也会引起调度. 具体的调度算法: fcfs简单,但是波动很大. 最高相应比算法,执行时间最长就应该等待的长点,比sjf多了一个等待时间的考虑. 硬件定时器和软件计数器共同 ...

  8. jpeg解码库使用实例

    jpeg库下载地址: http://www.ijg.org/ 交叉编译三部曲: A ./configure --host=arm-linux-gcc --prefix=/home/flying/jpe ...

  9. Spring @Transactional 浅谈

    一般当我们在一个方法里面操作多个数据对象的可持久化操作时,我们通常这些操作能够成功一起事务提交成功.默认情况下,数据库处于自动提交模式.每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成 ...

  10. django+xadmin在线教育平台(三)

    通过留言版功能回顾django基础知识 将对于django目录结构,使用Django快速搭建可以提交的表单页面,models.py , urls.py, views.py. 从数据库中取出数据展示到h ...