博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stdlib.h中自带的两个算法qsort,bsearch
阅读量:5232 次
发布时间:2019-06-14

本文共 1774 字,大约阅读时间需要 5 分钟。

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 1; return 0; } void test(ListNode *head){ int *a = new int[15]; for(int i = 0;i<15;i++){ a[i] = rand()%15+1;///1..15 } for(int i = 0;i<15;i++){ cout<
<<" "; }cout<

 

===

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[10]; for(int i = 0;i<10;i++){ a[i] = i; } int b[2] = {
7,2}; int *v = nullptr; v = (int *)bsearch(b,a,10,sizeof(int),mycmp); cout<<*v<

 

 

  

转载于:https://www.cnblogs.com/li-daphne/p/5520309.html

你可能感兴趣的文章
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>