stdlib.h中自带的两个算法qsort,bsearch
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的更多相关文章
- Leetcode94. Binary Tree Inorder Traversal二叉树的中序遍历(两种算法)
给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归: class So ...
- c语言实用功能库函数#include<stdlib.h>
实用函数<stdlib.h> 在头文件<stdlib.h>中说明了用于数值转换.内存分配以及具有其他相似任务的函数. 1 atof #include <stdlib.h& ...
- #include <stdlib.h>
1 _itoa 2 atoi 3 rand() 4 srand 1 _itoa _itoa(int value,char*string,int radix); int value 被转换的整数,cha ...
- stdlib.h 头文件
stdlib 头文件即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldi ...
- cstdlib和stdlib.h区别
一.区别 #include<stdlib.h> :.h是C的习惯 #include<cstdlib> : c开头是C++的习惯 二.stdlib.h是C语言库头文件之一,包含了 ...
- C 标准库 - <stdlib.h>
C 标准库 - <stdlib.h> 简介 stdlib .h 头文件定义了四个变量类型.一些宏和各种通用工具函数. 库变量 下面是头文件 stdlib.h 中定义的变量类型: 序号 变量 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- C++中#include包含头文件带 .h 和不带 .h 的区别
C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...
随机推荐
- [Git] Create a new repository on the command line
echo "# xxx" >> README.md git init git add README.md git commit -m "first commi ...
- linux命令 ——目录
开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令.学习的主要参考资料为: 1.<鸟哥的linux私房菜> 2.http://codingstan ...
- 如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误
打开SAP云平台上的SAP HANA Web-Based Development Workbench超链接: 遇到错误信息:403 - Forbidden - The server refused t ...
- VM安装centOS6.9
1.首先要下载一个centos的iso镜像,用VMware创建一个空白硬盘. 2.创建完毕再设置里面挂载iso的centos系统文件. 3.进入到这个页面: 说明: ①install or upgra ...
- mac上Apache修改目录浏览权限
sudo vim /etc/apache2/httpd.conf <Directory "/Library/WebServer/Documents"> # # Poss ...
- POJ 2229 Sumsets(递推,找规律)
构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1然后合并,因为和顺序无关,所以只和出现次数有关情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方案数 ...
- Python 之继承
概要 如果要修改现有类的行为,我们不必再从头建一个新的类,可以直接利用继承这一功能.下面将以实例相结合介绍继承的用法. 新建一个基类 代码如下: class Marvel(object): num ...
- python 读取mat文件
import osimport scipy.io as sio import numpy as np #matlab文件名 matfn='/home/user/devkit/data/meta_det ...
- Sql优化器究竟帮你做了哪些工作?
关系型数据库的一大优势之一,用户无需关心数据的访问方式,因为这些优化器都帮我们处理好了,但sql查询优化的时候,我不得不要对此进行关注,因为这牵扯到查询性能问题. 有经验的程序员都会对一些sql优化了 ...
- vue学习之路 - 1.初步感知
一.安装 这里使用node的npm包管理工具进行操作.操作前请先下载node. 在工程文件夹中使用以下命令安装vue: npm install vue 如下图所示:我在 helloworld 文件夹中 ...