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> 包含的东西有哪些 ...
随机推荐
- <已解决> Eclipse启动失败
参考:http://stackoverflow.com/questions/15404964/starting-eclipse-results-in-failed-to-create-java-vir ...
- 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)
点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...
- 动态规划专题(一)——状压DP
前言 最近,决定好好恶补一下我最不擅长的\(DP\). 动态规划的种类还是很多的,我就从 状压\(DP\) 开始讲起吧. 简介 状压\(DP\)应该是一个比较玄学的东西. 由于它的时间复杂度是指数级的 ...
- python_图形界面编程示例
"常用Tkinter组件的使用" #一.弹出消息框 #1 弹出提示消息框 from tkinter.messagebox import * showinfo(title='提示', ...
- Cobbler自动安装的Linux系统ssh无法进入
Linux ssh登陆老提示“permission denied,please try again” ,但是iptables已经关掉了 修改/etc/ssh/sshd_config文件.找如下的一句 ...
- Bootstrap 折叠(collapse)插件面板
折叠插件(collapse)可以很容易地让页面区域折叠起来, 无论您是用它来创建折叠导航还是内容面板,它都允许很多内容选项. 您可以使用折叠插件 1.创建可折叠的分组或折叠的面板 <!DOCTY ...
- GMap.Net解决方案之在WinForm和WPF中使用GMap.Net地图插件的开发
在做地理位置相关的开发时,总是面临高额地图引擎费用让大部分用户望而却步,加之地图数据又是天价,那么GMap.NET就是首选了,它本身就是开源免费,服务器可以在本地缓存,以后访问时就可以直接访问. 可以 ...
- 2018.11.3 Nescafe18 T1 七夕祭
题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是 TYVJ 今年举办了一次线下七夕祭.Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩. ...
- SpringMVC解决前台传入的数组或集合类型数据
1前台处理如下: $.ajax({ url:"saveMapInfo", type:"POST", dataType:"json", con ...
- 无线Web开发
http://am-team.github.io/amg/dev-exp-doc.html