linux c 库函数 qsort 和bsearch

来源:互联网 发布:windows service pack 编辑:程序博客网 时间:2024/06/05 12:03

函数原型: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);

    }

}

原创粉丝点击