C语言程序bsearch函数的一些疑问

#include<stdio.h>#include<stdlib.h>#define MAX 20int intcmp(const void *v1,const void *v2);int main(void){int arr[MAX],count,key,*ptr;printf("Enter %d integer values; press Enter after each.\n",MAX);for(count=0;count<MAX;count++)scanf("%d",&arr[count]);puts("Press Enter to sort the values.");getc(stdin);qsort(arr,MAX,sizeof(arr[0]),intcmp);for(count=0;count<MAX;count++)printf("\narr[%d]=%d.",count,arr[count]);puts("\nPress Enter to continue.");getc(stdin);printf("Enter a value to search for:");scanf("%d",&key);ptr=(int*)bsearch(&key,arr,MAX,sizeof(arr[0]),intcmp);if(ptr!=NULL)printf("%d found at arr[%d].",key,(ptr-arr));elseprintf("%d not found.",key);getch();getch();}int intcmp(const void *v1,const void *v2){return(*(int*)v1-*(int*)v2);}intcmp  没有实参???为什么还能算??bsearch 最后一个参数不是函数指针么??bsearch 有排序功能么???

第1个回答  2012-08-02
sorry代码太乱了没看,但是bsearch是二分查找函数,传入的带查找数据(arr)必须是有序的。没有排序功能。

C语言程序bsearch函数的一些疑问
sorry代码太乱了没看,但是bsearch是二分查找函数,传入的带查找数据(arr)必须是有序的。没有排序功能。

c语言库函数isidigt的疑问
bsearch里面的intcmp就是intcmp函数代表的地址,虽然这里面没有实参,但是在bsearch的内部会调用intcmp地址处的函数,然后再把预订好的实参传递进去。我没有使用过这个函数,但从代码的角度来看,之前使用了qsort,bsearch应该不具备排序功能。

C语言的bsearch函数遇到重复元素怎么找出来?
这个理论上使用的是二分查找的方法,一般的二分查找,要求数组是升序的,最后的返回值也是一个指针,所以如果有重复值的话是找不出来的,需要你去用一般二分查找去判定左值和右值,才能找到重复区间。

bsearch简介
在C语言编程中,有一个实用的函数叫做<bsearch,它采用二分法搜索算法,为数据查找提供了一种高效的手段。要使用函数,首先需要包含头文件<stdlib.h>,然后调用它的声明如下:void *bsearch(const void *key, const void *base, size_t nelem, size_t width, int(*fcmp)(const void *, const *)...

C语言bsearch()和qsort()调用的比较函数是怎么实现比较的
才能制定排序的标准。通过自己传入不同的比较函数,可以用qsort实现不同数据类型的排序。比如string, int, double, 甚至结构体。采用这种手段的话,就可以复用排序的逻辑,而不必要为所有的数据类型都提供一个qsort函数。同理bSearch函数里面也需要比较函数,道理是一样的。

C语言程序题:写出递归与非递归两种折半查找程序,并分析其时间空间复杂...
include<iostream>using namespace std;int bSearch(int data[], const int x, int beg, int last){int mid;if (beg > last){return -1;}while(beg <= last){mid = (beg + last) \/ 2;if (x == data[mid] ){return mid;}else if (data[mid] < x){beg = mid + 1;}else ...

回调函数(callback)是什么? ,,
回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。最著名的回调函数调用有C\/C++标准库stdlib.h\/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。意义 因为可以把调用者...

求解C语言编程:题目,给定程序的功能是将在字符串S中出现、而未在字符...
if(*p!=*pl && !bsearch(pl,rsz,strlen(rsz),sizeof(char),compare) ){ ++p=*pl++;} else pl++;} strcpy(lsz,tmp+1);free(tmp);return lsz;};int main(){ char sz1[128],sz2[128];scanf("%s %s",sz1,sz2);printf("%s\\n%s\\n",sz1,sz2);printf("%s\\n",diff(sz1,...

C++中头文件cstdlib是什么?
就是C中的stdlib.h,在C++中调用该头文件中的函数需要引用cstdlib 用法与C语言中的stdlib.h相同。stdlib 头文件即standard library标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX...

C语言的函数,变量,之类的一共有多少?
变量有种:整型变量、实型变量和字符型变量。下面列出C标准库函数 abort stdlib. h abs stdlib. h acos math. h asctime time. h asin math. h assert assert.h atan math. h atan2 math. h atexit stdlib. h atof stdlib. h atoi stdlib. h atol stdlib. h bsearch stdlib. h BUFSIZ ...

相似回答
大家正在搜