函数 qsort 和 bsearch 的用法(poj2503)
2014-07-21 11:07
344 查看
c函数qsort()和bsearch()的用法 使用qsort()排序 并 用 bsearch()搜索是一个比较常用的组合,使用方便快捷。 qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) ) 其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。 比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。 qsort(a,1000,sizeof(int ),comp); 其中comp函数应写为: int comp(const void *a,const void *b) { return *(int *)a-*(int *)b; } 是对一个二维数组的进行排序: int a[1000][2]; 其中按照a[i][0]的大小进行一个整体的排序,其中a[i][1]必须和a[i][0]一起移动交换。 qsort(a,1000,sizeof(int)*2,comp); int comp(const void *a,const void *b) { return ((int *)a)[0]-((int *)b)[0]; } 对字符串进行一个排序: char a[1000][20]; qsort(a,1000,sizeof(char)*20,comp); int comp(const void *a,const void *b { return strcmp((char *)a,(char *)b); } 对一个结构体进行排序: typedef struct str { char str1[11]; char str2[11]; }str,*stri; str strin[100001]={0}; int compare(const void *a,const void *b) { return strcmp( ((str*)a)->str2 , ((str*)b)->str2 ); } qsort(strin,total,sizeof(str),compare); 而关于bsearch() ,他和qsort的用法基本一样,只是他的返回值是一个指向找到的单位元素的一个指针,另外他多了一个参数,是一个指向查找元素的一个指针。 比如:从上面例子中的结构体数组中查找一个字符串: str *locate; char buffer[30]="abc"; locate=(str*)bsearch(buffer,strin,total,sizeof(str),com); int com(const void *a,const void *b) { return strcmp( (char*)a, ((str*)b)->str2 ); } poj2503 http://poj.org/problem?id=2503/*此题还应注意的地方是字典输入的结束设置,希望能提出更好的解决方法(测试通过后再告诉我)。 例题源代码:*/ #include<iostream> #include<cstring> using namespace std; typedef struct str{ char s1[11]; char s2[11]; }str,*stri; str s[100001]; int cmp(const void *a,const void *b){ return strcmp( ((str *)a)->s2 , ((str *)b)->s2 ); } int compare(const void *a,const void *b){ return strcmp((char*)a,((str*)b)->s2); } int main(){ int n=0; char tt[25]; while(1){ gets(tt); if(strlen(tt)==0)break; int i=0,j=0; for(;tt[i]!=' ';i++)s .s1[i]=tt[i]; s .s1[i]='\0'; for(i++;tt[i]!='\0';i++,j++)s .s2[j]=tt[i]; s .s2[j]='\0'; n++; } qsort(s,n,sizeof(str),cmp); while(scanf("%s",tt)!=EOF){ str * pItem; pItem = (str *)bsearch (tt, s, n, sizeof (str), compare); if(pItem!=NULL) puts(pItem->s1); else printf("eh\n"); } return 0; }
相关文章推荐
- 函数 qsort 和 bsearch 的用法(poj2503)
- C++ 排序函数 sort(),qsort()的用法【转】
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- qsort 函数用法
- C/C++程序员:排序算法之标准C语言qsort函数简单用法介绍
- 函数qsort()和bsearch()的用法
- qsort函数用法
- qsort函数用法
- C++ 排序函数 sort(),qsort()的用法
- qsort bsearch 函数用法
- qsort函数用法大全
- c qsort()的辅助函数的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- qsort函数用法
- sort()函数与qsort()函数及其用法
- 工作总结:qsort函数用法
- C++ 排序函数 sort(),qsort()的用法(转载)
- C++ 排序函数 sort(),qsort()的用法