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. IIS7.5配置自动添加www 及 限制通过IP访问web

    IIS7.5配置自动添加www 方法 新建一个站点2(主机名为不带www的站点),将其重定向至带www的URL即可. 注意以下几点 站点2不可与站点1的路径一致,否则会导致站点1也会添加同样的重定向, ...

  2. 从asp.net到jsp:3分钟看透Jsp&Servlet

    零:JSP是谁? 话说故事的开头是这样的:JSP全名为Java Server Pages,其根本是一个简化的Servlet设计:后来的详细事情有请各位自便.美女→找→谷哥 or 帅哥→找→度娘 插播: ...

  3. POJ 1769 Minimizing maximizer (线段树优化dp)

    dp[i = 前i中sorter][j = 将min移动到j位置] = 最短的sorter序列. 对于sorteri只会更新它右边端点r的位置,因此可以把数组改成一维的,dp[r] = min(dp[ ...

  4. 《剑指offer》【调整数组顺序使奇数位于偶数前面】(python版)

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分 思路: 我认真看了一下,题目应该是要求在原地调整,所以这里不能再 ...

  5. Feign + Hystrix 服务熔断和服务降级

    本机IP为  192.168.1.102 1.    新建 Maven 项目   feign 2.   pom.xml <project xmlns="http://maven.apa ...

  6. Dropout & Maxout

    [ML] My Journal from Neural Network to Deep Learning: A Brief Introduction to Deep Learning. Part. E ...

  7. tk.mybatis Example 多个or条件拼接

    //需要的查询条件为 a and (b or c or d) 可以转换为 (a and b) or (a and c) or (a and d) private Example madeExample ...

  8. java字符格式

    http://blog.chinaunix.net/uid-12348673-id-3335300.html http://blog.csdn.net/zhouyong80/article/detai ...

  9. mysql--连接查询(内外连接)

    连接查询又称多表查询,查询到的字段来自于多个表中的数据. 一. 连接查询的分类和语法 1.分类 按标准分: 92标准:只支持内连接 99标准:支持内连接和.外连接和全外连接 功能进行分类: 内连接:i ...

  10. c 语言技巧

    位运算 & 位逻辑与 | 位逻辑或 ^ 位逻辑异或 - 位逻辑反 >> 右移 << 左移 通过对数据本身的01编码进行处理,速度稍微快于普通运算符 如,10 / 2 = ...