qsort__词典
sort__排队III
//
先说结论:01 sort 参数少 写 cmp 函数也方便
02 qsort 对于 cmp 函数 返回值 做出的反应 有些特殊( 详细看下文 )
03 默认 都是 升序 排序 ( 所以才会出现02要点 )
04 cmp 函数返回值不同 ( sort bool :qsort int )
05 效率...
//
sort ( void *begin, void *end, bool *cmp );01 头文件 #include<algorithm> 或 #include<bits/stdc++.h>02 参数:begin:指向 待排序数组的 第一个元素的指针end:指向 待排序数组的 最后一个元素的 "下一个位置"的指针cmp:指向 排序规则函数的 函数指针 ( 省略此参数时"默认为升序排序" )03 返回值:bool cmp( void a,void b ){if( 符合我们的排序需求 ) return true;else return false;}(1) true a 被排在 b 前面(2) false 对 a 与 b 的次序 不做改变eg:降序排序bool my_cmp(int a, int b)
{if( a>b ) return true;else return false;
}
//
void qsort( void *arr, int n, int size, int (*cmp)(const void *, const void *) );01 头文件:#include<stdlib.h> 或 #include<bits/stdc++.h>02 功能:对数组进行排序,数组有n个元素,每个元素大小为size。03 参数:(1)arr:指向数组的起始地址,通常该位置传入的是一个数组名。(2)n:该数组的 元素个数(3)size:该数组中 每个元素的大小( 一般用sizeof()表示 )(4)int (*cmp):指向比较函数的函数指针,决定排序顺序04 qsort返回值:无05 注意:如果两个元素的值是相同的,那么它们的前后顺序是不确定的。( 不稳定 )06 int cmp (const void *p1, const void *p2); (1) 返回值<0 p1所指向元素 被排在 p2所指向元素的 前面(2) 返回值==0 p1所指向元素 与p2所指向元素的 顺序不确定(3) 返回值>0 p1所指向元素 被排在 p2所指向元素的 后面!!! 注意 (1)cmp 也是默认升序排序 但和 sort bool型比较函数 返回值做出的反应 有点小区别(2) 不同类型数据比较时:( "以下均为升序" )eg.
int cmp( const void *a,const void *b )
{01 int//当a<b时 会返回false ( 值为0 ) 会被qsort误认为二者相等 最终导致排序错误return *(int*)a>*(int*)b; (x)正确写法return *(int*)a-*(int*)b;或return ( *(int*)a ) > ( *(int*)b ) ? 1:-1 ;02 doublereturn ( *(double*)a ) > ( *(double*)b ) ? 1:-1 ;03 charreturn *(char*)a - *(int*)b ;04 字符串return strcmp( (char*)a,(char*)b ) ;05 结构体 ...}07 qsort 通常结合 bsearch 一起使用bsearch()函数二分查找:bsearch(const void *key, const void *arr, int num, int size, int (*cmp) (const void *, const void *));01 功能:在目标数组中找所求数据02 头文件:<stdlib.h>03 参数:(1) key 指向要查找的元素 的指针 ( 找谁 )(2) arr 指向进行查找的 目标数组 ( 在哪找 )(3) num 数组中元素的个数 ( 找的地方有多少组数据 )(4) size 数组中每个元素的大小,一般用sizeof()表示 ( 那个地方的单个数据大小是多少 )(5) cmp 比较两个元素的函数,定义比较规则 ( 怎么找 )(自定义比较函数)04 返回值:查找成功,返回指向数组中匹配元素的指针 ; 否则返回NULL05 注意:多个元素匹配成功时,bsearch()未定义返回哪一个(不稳定)