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> 包含的东西有哪些 ...
随机推荐
- LeetCode Find Peak Element 找临时最大值
Status: AcceptedRuntime: 9 ms 题意:给一个数组,用Vector容器装的,要求找到一个临时最高点,可以假设有num[-1]和num[n]两个元素,都是无穷小,那么当只有一个 ...
- 利用jsplumb和碰撞检测自动生成流程图
使用jsplumb构建流程图模型时,有一个需求要求,选项可以从选项表中拖拽到指定容器,并且两个选项要接触到的时候才能连接起来,不接触不能连接.效果图如下 略丑- 因为这里用到了拖拽,拖放功能,所以用到 ...
- 使用JDBC操作SAP云平台上的HANA数据库
本文假设您对JDBC(Java Database Connectivity)有最基本的了解.您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客AD ...
- js中(break,continue,return)的区别
break 一般用于跳出整个循环(for,while) continue 跳出本次循环,进入下一次循环 return 只能出现在函数体内,一旦执行return,后面的代码将不会执行,经常用retur ...
- World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)
http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...
- 【转】android调试工具DDMS的使用详解
具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发 ...
- 2018.5.22 Oracle安装配置在虚拟机中外部电脑连接服务
1.拷贝老师的集成文件(win系统和oracle服务) 2.安装虚拟机,并且打开镜像文件 3.启动监听程序(实例服务[自动].监听服务) 4.查看虚拟机ip,此ip要主机ip在同一个网段 5.检查虚拟 ...
- python生成随机数
import random rnd=rand.uniform(0,10)
- windows2012服务器搭建mongodb并设置远程访问
因为python脚本需要用到mongodb,而且需要本地查看数据库,所以就在腾讯云的windows服务器上部署了mongodb服务器,因为网上大部分教程是针对linux的自己搜索走了很多坑,这里记录下 ...
- 01_15_Struts2_带参数的结果集
01_15_Struts2_带参数的结果集 1. 背景说明 服务器端页面跳转的时候,通过struts提供的标签的valuestack可以直接取.服务器端的转发,valuestack的对象属性可以共享. ...