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;
}
分享到:
相关推荐
本资料“c-language-library-function-.zip”似乎是一个关于C语言函数库的详细指南,包含了各种函数的使用说明和实例,对于学习和理解C语言的库函数非常有帮助。 C语言的标准库(Standard Library)遵循ANSI C或C99...
通过深入理解每个函数的工作原理和使用方法,程序员可以编写出更稳定、高效的代码。此外,对于C语言初学者,了解并熟练运用这些函数是迈进高级编程技术的第一步。在实际开发中,还会涉及到更多第三方库,如GLibC、...
为了使用bsearch(),数组必须事先使用qsort()或类似的方法进行排序,排序规则要与比较函数相匹配。如果没有排序,或者排序规则与比较函数不一致,bsearch()可能不会返回正确的结果。 如果在数组中成功找到与`key`相...
以上只是C语言标准库的一部分,每个函数都有其特定的用途和用法,掌握这些函数能极大地提升编程效率。通过深入学习和实践,开发者可以更加熟练地运用C语言解决各种问题。这个压缩包提供的C语言函数大全,正是一个很...
本资源“Linux常用C函数(中文版)”是一个针对C语言函数的中文手册,旨在帮助程序员快速查询和理解C函数的使用方法。手册中不仅包含函数的基本介绍,还配以实例来加深理解。 C语言中的函数是程序的核心组成部分,...
文档内容的结构主要是展示各个函数的使用方法和简单示例,但因为OCR识别错误导致部分代码示例存在不完整或不清晰的问题。理解了这些函数的使用方法后,可以根据实际需要将这些知识点应用到编程实践中。对于OCR识别的...
5. **排序和搜索**:`<search.h>`和`<stdlib.h>`中的`qsort`函数用于对数据进行快速排序,`bsearch`是二分查找函数。 6. **错误处理**:`errno`全局变量和`perror`函数帮助程序员识别和处理运行时错误。 7. **文件...
10. **排序和搜索函数**:`<algorithm>`库(C++)或`<stdlib.h>`中的`qsort()`进行快速排序,`bsearch()`执行二分查找。 以上只是C语言函数库中的一部分,实际的库中还包括了更多如I/O流、线程、信号处理等领域的...
"C标准函数参考资料详解"是一个针对C语言标准库函数的详细指南,旨在帮助开发者快速查找并理解各种函数的用法。下面将对C标准函数进行深入的解析。 C标准库,也称为C运行时库,是C语言编程的核心部分,包含了大量...
根据给定文件的信息,我们可以对C函数库进行详细的解析与说明。...通过学习和掌握这些函数的使用方法,可以极大地提高编程效率和代码质量。希望这份详尽的指南能够帮助读者更好地理解和应用C语言中的函数库。
7. 排序和搜索函数:如qsort()实现快速排序,bsearch()进行二分查找。 8. 位操作函数:如bitwise operators (&, |, ^, ~, , >>)用于处理二进制数据。 深入理解这些库函数对于编写高效的C程序至关重要。例如,了解...
12. **标准库函数**:如数学函数(sin, cos, sqrt等),输入输出函数(printf, scanf, fgets, fputs等),排序和搜索函数(qsort, bsearch等)。 13. **编译和链接**:理解编译器的工作原理,编译选项的使用,静态...
10. 链表和数组操作:`<stdlib.h>`中的`qsort`函数实现快速排序,`bsearch`进行二分查找,`memcpy`和`memmove`用于内存块的复制和移动。 了解并熟练使用C库函数是每个C程序员的基本功。正确地运用它们可以提高代码...
13. **标准库函数**:熟练掌握C标准库提供的函数,如输入输出函数(scanf, printf)、数学函数(sqrt, pow等)、排序和查找函数(qsort, bsearch等)。 哈工大计算机考研复试中,可能会涉及C语言的实际编程能力测试...
6. **内存管理**:C语言提供了动态内存分配(malloc、calloc、realloc、free)的功能,考生需要理解这些函数的用途和使用方法,避免内存泄漏和悬挂指针的问题。 7. **文件操作**:C语言中的文件输入输出(fopen、...
11. **标准库函数**:如数学函数(sqrt、pow等)、输入输出(printf、scanf等)、排序和搜索算法(qsort、bsearch等)等。 通过阅读和实践这些经典案例,学习者不仅可以巩固对C语言基础的理解,还能提高解决问题的...
排序函数如`qsort()`对数组进行快速排序,`bsearch()`实现二分查找。这些算法在处理大量数据时提高了效率。 十、其他实用函数 还有许多其他实用函数,如`rand()`生成随机数,`exit()`结束程序,`sleep()`使进程...
10. **标准库函数**:C标准库提供了丰富的函数,如数学函数(sqrt, pow等)、输入输出函数(scanf, printf等)、排序和搜索算法(qsort, bsearch等)等,熟悉并合理使用这些函数能提高编程效率。 谭浩强教授的最新...
7. 数组和排序函数:`qsort`实现快速排序,`bsearch`进行二分查找。 8. 格式化转换函数:`atoi`、`atof`将字符串转换为整数和浮点数,`itoa`将整数转换为字符串。 9. 链表和树结构:虽然C语言本身不提供内置支持,...