函数原型:void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *,const void *));
base:要查找数组的首地址
nmemb:数组元素个数
size:元素大小
compare:回调函数,指明两个元素比较的方法。
例子:
#include <stdio.h>
int compar( const void* a, const void *b )//以升序排序
{
return *(int*)a-*(int*)b;
}
int main( int argc, char* argv[] )
{
int a[] = {10,2,6,1,8,5,7,3,4,18,20,24,-1};
qsort(a,sizeof(a)/sizeof(int),sizeof(int),compar);
int i;
for( i=0; i< sizeof(a)/sizeof(a[0]) ;i++)
{
printf("%d:%d\n",i,a[i]);
}
}
bsearch:
函数原型:void*bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*compar)(constvoid *, const void *));
key:搜索关键字
base:数组起始地址
nmemb:数组大小
size:数组元素大小
compare:回调函数,用于比较两个关键字
例子:
#include <stdio.h>
#include <stdlib.h>
int compar( const void *a1,const void *a2 )
{
return*((int *)a1) - *((int*)a2);
}
int main( int argc,char* argv[] )
{
if( argc!= 2 )
{
printf("error\n");
return-1;
}
int a[] ={1,2,3,4,5,6,7,8};
int i = atoi(argv[1]);
int *position=NULL;
position= bsearch( &i,a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),compar);
if(position == NULL )
{
printf("cannot find the key\n");
}
else
{
printf("Findthe key:%d,in position:%d\n",i,position-a);
}
}