快速排序与折半查找算法函数:qsort与bsearch
2013-04-21 11:41
281 查看
qsort用来排序,bsearch用二分法来查找元素
void qsort( void *base, size_t num, size_t width,int (__cdecl *compare)(const void *elem1, const void *elem2 ) );
base: 要排序的数组
num: 数组中的元素数目
width: 每个数组元素占用内存空间,可使用sizeof获得
compare: 比较两个数组元素的比较函数。本比较函数的第一个参数值小于、等于、大于第二参数值时,本比较函数的返回值应分别小于、等于、大于零。compare的两个参数elem1、elem2大小均等于width.
void *bsearch( const void *key, const void *base, size_t
num,size_t width, int ( __cdecl *compare) ( const void *elem1, const void *elem2 ) );
qsort函数的compare参数也是一个函数指针,但其所指函数的参数elem1指向key,只有参数elem2大小等于width.
key:待查找的元素,它的类型不确定
base:升序排列的数组
num、width:同qsort函数的参数
compare:与qsort中不同之处在于它的参数elem1指向key,参数elem2大小等于width,指向base中的元素。
void qsort( void *base, size_t num, size_t width,int (__cdecl *compare)(const void *elem1, const void *elem2 ) );
base: 要排序的数组
num: 数组中的元素数目
width: 每个数组元素占用内存空间,可使用sizeof获得
compare: 比较两个数组元素的比较函数。本比较函数的第一个参数值小于、等于、大于第二参数值时,本比较函数的返回值应分别小于、等于、大于零。compare的两个参数elem1、elem2大小均等于width.
void *bsearch( const void *key, const void *base, size_t
num,size_t width, int ( __cdecl *compare) ( const void *elem1, const void *elem2 ) );
qsort函数的compare参数也是一个函数指针,但其所指函数的参数elem1指向key,只有参数elem2大小等于width.
key:待查找的元素,它的类型不确定
base:升序排列的数组
num、width:同qsort函数的参数
compare:与qsort中不同之处在于它的参数elem1指向key,参数elem2大小等于width,指向base中的元素。
///////////////////////////////// #include <stdlib.h> typedef struct { int no; char name[100]; }student; int compare(const void *s0, const void *s1); /* Declare a function for compare */ int find(const void *s0, const void *s1); student yy[] = {{1, "aaa"}, {2, "bbb"}, {5, "agd"}, {0, "xxx"}}; void main( ) { student *argv = yy; int argc = sizeof(yy) / sizeof(yy[0]); student *result; int key = 2; int i; /* Sort using Quicksort algorithm: */ qsort(argv, (size_t)argc, sizeof(student), compare ); for( i = 0; i < argc; ++i ) /* Output sorted list */ printf( "{%d %s} ", argv[i].no, argv[i].name); /* Find the word "key" using a binary search algorithm: */ result = (student *)bsearch(&key, argv, argc, sizeof(student), find ); if( result ) printf( "\n{%d %s} found at %Fp\n", result->no, result->name, result); else printf( "\nkey not found!\n" ); } int compare(const void *s0, const void *s1) { student *a0 = (student *)s0; student *a1 = (student *)s1; if (a0->no == a1->no) return 0; else if (a0->no > a1->no) return 1; else return -1; } int find(const void *s0, const void *s1) { int no = *(int*)s0; student *s = (student*)s1; if (no == s->no) return 0; else if (no > s->no) return 1; else return -1; }
相关文章推荐
- 快速排序qsort()函数和二分查找bsearch()函数
- sort(排序) qsort(快排) bsearch(二分查找)
- 在C语言的库函数中就有快速排序的库函数,即为qsort
- 快速排序函数qsort介绍
- 快速排序 [Qsort]
- C 语言中自定义类型排序函数qsort以及相应的二分法查找函数bsearch
- 快速排序的优化及其与qsort的比较
- C语言快速排序函数qsort
- 快速排序qsort的使用
- C/C++ qsort()快速排序用法
- 快速排序 C语言的qsort及C++的sort
- 使用qsort()和bsearch()函数对值和字符串进行排序和查找
- 快速排序qsort和sort的用法
- 快速排序的库函数qsort与sort的使用方法
- c语言字符串快速排序qsort()
- 快速排序 qsort
- 二分查找函数bsearch与排序函数qsort(两个好基友)
- 快速排序 qsort()函数
- 排序,查找,qsort和bsearch的简单总结,scanf字符串截取
- 调用库函数进行的qsort快速排序