`
caoruntao
  • 浏览: 480931 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

[转]C 函数qsort()和bsearch()的用法

阅读更多

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-language-library-function-.zip”似乎是一个关于C语言函数库的详细指南,包含了各种函数的使用说明和实例,对于学习和理解C语言的库函数非常有帮助。 C语言的标准库(Standard Library)遵循ANSI C或C99...

    c语言函数库.rar

    通过深入理解每个函数的工作原理和使用方法,程序员可以编写出更稳定、高效的代码。此外,对于C语言初学者,了解并熟练运用这些函数是迈进高级编程技术的第一步。在实际开发中,还会涉及到更多第三方库,如GLibC、...

    C语言中用bsearch()实现查找操作

    为了使用bsearch(),数组必须事先使用qsort()或类似的方法进行排序,排序规则要与比较函数相匹配。如果没有排序,或者排序规则与比较函数不一致,bsearch()可能不会返回正确的结果。 如果在数组中成功找到与`key`相...

    C语言标准函数库 包括全部常用库函数

    以上只是C语言标准库的一部分,每个函数都有其特定的用途和用法,掌握这些函数能极大地提升编程效率。通过深入学习和实践,开发者可以更加熟练地运用C语言解决各种问题。这个压缩包提供的C语言函数大全,正是一个很...

    Linux 常用C函数(中文版)

    本资源“Linux常用C函数(中文版)”是一个针对C语言函数的中文手册,旨在帮助程序员快速查询和理解C函数的使用方法。手册中不仅包含函数的基本介绍,还配以实例来加深理解。 C语言中的函数是程序的核心组成部分,...

    c语言函数库-第七章(其它函数).pdf

    文档内容的结构主要是展示各个函数的使用方法和简单示例,但因为OCR识别错误导致部分代码示例存在不完整或不清晰的问题。理解了这些函数的使用方法后,可以根据实际需要将这些知识点应用到编程实践中。对于OCR识别的...

    C语言函数库

    5. **排序和搜索**:`<search.h>`和`<stdlib.h>`中的`qsort`函数用于对数据进行快速排序,`bsearch`是二分查找函数。 6. **错误处理**:`errno`全局变量和`perror`函数帮助程序员识别和处理运行时错误。 7. **文件...

    C编程语言函数库(全)

    10. **排序和搜索函数**:`<algorithm>`库(C++)或`<stdlib.h>`中的`qsort()`进行快速排序,`bsearch()`执行二分查找。 以上只是C语言函数库中的一部分,实际的库中还包括了更多如I/O流、线程、信号处理等领域的...

    C标准函数参考资料详解

    "C标准函数参考资料详解"是一个针对C语言标准库函数的详细指南,旨在帮助开发者快速查找并理解各种函数的用法。下面将对C标准函数进行深入的解析。 C标准库,也称为C运行时库,是C语言编程的核心部分,包含了大量...

    C函数库详解大全是很好滴材料

    根据给定文件的信息,我们可以对C函数库进行详细的解析与说明。...通过学习和掌握这些函数的使用方法,可以极大地提高编程效率和代码质量。希望这份详尽的指南能够帮助读者更好地理解和应用C语言中的函数库。

    C程序语言库函数大全

    7. 排序和搜索函数:如qsort()实现快速排序,bsearch()进行二分查找。 8. 位操作函数:如bitwise operators (&, |, ^, ~, , >>)用于处理二进制数据。 深入理解这些库函数对于编写高效的C程序至关重要。例如,了解...

    你必须知道的495个C语言问题

    12. **标准库函数**:如数学函数(sin, cos, sqrt等),输入输出函数(printf, scanf, fgets, fputs等),排序和搜索函数(qsort, bsearch等)。 13. **编译和链接**:理解编译器的工作原理,编译选项的使用,静态...

    C库函数查询

    10. 链表和数组操作:`<stdlib.h>`中的`qsort`函数实现快速排序,`bsearch`进行二分查找,`memcpy`和`memmove`用于内存块的复制和移动。 了解并熟练使用C库函数是每个C程序员的基本功。正确地运用它们可以提高代码...

    考试类精品--哈工大计算机考研复试C语言.zip

    13. **标准库函数**:熟练掌握C标准库提供的函数,如输入输出函数(scanf, printf)、数学函数(sqrt, pow等)、排序和查找函数(qsort, bsearch等)。 哈工大计算机考研复试中,可能会涉及C语言的实际编程能力测试...

    全国计算机等级考试c语言历年试题

    6. **内存管理**:C语言提供了动态内存分配(malloc、calloc、realloc、free)的功能,考生需要理解这些函数的用途和使用方法,避免内存泄漏和悬挂指针的问题。 7. **文件操作**:C语言中的文件输入输出(fopen、...

    经典C语言程序100案例.zip

    11. **标准库函数**:如数学函数(sqrt、pow等)、输入输出(printf、scanf等)、排序和搜索算法(qsort、bsearch等)等。 通过阅读和实践这些经典案例,学习者不仅可以巩固对C语言基础的理解,还能提高解决问题的...

    2003常用函数完全手册.

    排序函数如`qsort()`对数组进行快速排序,`bsearch()`实现二分查找。这些算法在处理大量数据时提高了效率。 十、其他实用函数 还有许多其他实用函数,如`rand()`生成随机数,`exit()`结束程序,`sleep()`使进程...

    C语言(谭浩强,最新版)

    10. **标准库函数**:C标准库提供了丰富的函数,如数学函数(sqrt, pow等)、输入输出函数(scanf, printf等)、排序和搜索算法(qsort, bsearch等)等,熟悉并合理使用这些函数能提高编程效率。 谭浩强教授的最新...

    C语言库函数范例教程

    7. 数组和排序函数:`qsort`实现快速排序,`bsearch`进行二分查找。 8. 格式化转换函数:`atoi`、`atof`将字符串转换为整数和浮点数,`itoa`将整数转换为字符串。 9. 链表和树结构:虽然C语言本身不提供内置支持,...

Global site tag (gtag.js) - Google Analytics