http://202.38.75.11/~ruizhang/blog/archives/000331.html
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 );
}
可以大致比较两个函数的类似和差别。
例题:pku2503
此题还应注意的地方是字典输入的结束设置,希望能提出更好的解决方法(测试通过后再告诉我)。
例题源代码:
#include
#include
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[n].s1[i]=tt[i];
s[n].s1[i]='\0';
for(i++;tt[i]!='\0';i++,j++)s[n].s2[j]=tt[i];
s[n].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;
}
分享到:
相关推荐
1、讲解C语言标准函数qsort快速排序的功能和应用; 2、讲解C语言标准函数bsearch二分查找的功能和应用;
C函数qsort的简介和用法_新手入门.ppt
c语言词典结构体匹配法,qsort与bsearch
C函数qsort的简介和用法_新手入门
主要介绍了C语言中qsort函数用法,包括了针对各种数据类型参数的排序,非常具有实用价值,需要的朋友可以参考下
本文主要介绍C语言qsort函数算法性能的测试,感性趣的朋友可以看看。
C++中的快速排序,Qsort函数详细详解。并且有各种例子
qsort函数常见用法 适合ACM竞赛入门选手使用
qsort函数常见用法
C语言中qsort函数的用法实例详解 快速排序是一种用的最多的排序算法,在C语言的标准库中也有快速排序的函数,下面说一下详细用法。 qsort函数包含在中 qsort函数声明如下: void qsort(void * base,size_t nmemb...
C库函数qsort七种使用方法示例, 本人整理的关于qsort函数的使用方法,非常适合C语言初学者学习。
qsort的详细用法,可以用于自学。容易入门,懂
在C语言中,回调函数通常被用于实现事件处理和排序算法中。 `qsort`是C标准库中的一个排序函数,它可以对任意类型的数组进行排序。`qsort`需要三个参数:要排序的数组、数组元素的个数和一个指向回调函数的指针。回...
详细解读qsort,,,,绝对有用
C语言:巧用qsort,编程省时省力的技巧,难道还不心动吗?
C语言qsort快排函数的模版,帮助深入认识模版的快速高效的风格。
7中类型的数据怎么样快速排序齐全,包括记住的数据,以及结构体,二级排序,结构简单,拿来就能用,不必自己再重复写快拍的的麻烦代码,不过如果要求时间较高的话建议自己写