qsort()与besearch()

功 能: 使用快速排序例程进行排序

头文件:stdlib.h

用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数: 1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷。

qsort 的函数原型是void __cdecl qsort (void *base,size_tnum,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函数应写为:

1 intcomp(const void *a,const void *b)
2 {
3    return*(int*)a-*(int*)b;
4 }

对一个二维数组进行排序:

int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。//即第一行和第二行(a[0]和a[1]分别代表第一行和第二行的首地址

1 qsort(a,1000,sizeof(int)*2,comp);
2
3 int comp(const void *a,const void *b)
4
5 {
6    return(*(int*)a)[0]-(*(int*)b)[0];
7 }

用 法: void *bsearch(const void *key, const void *base, size_t nelem, size_t width, int(*fcmp)(const void *, const *));

语法:#include <stdlib.h>

void *bsearch( const void *key, const void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );

参数:第一个:要查找的关键字。

第二个:要查找的数组。

第三个:指定数组中元素的数目。

第四个:每个元素的长度(以字符为单位)。

第五个:指向比较函数的指针。

功能: 函数用折半查找法在从数组元素buf[0]到buf[num-1] 匹配参数key。

如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。

数组buf 中的元素应以升序排列。

函数bsearch()的返回值是指向匹配项,如果没有发现匹配项,返回NULL

qsort()与besearch()

时间: 2024-10-17 02:30:04

qsort()与besearch()的相关文章

qsort 函数的使用——对普通数组、指针数组、二维数组中的元素进行排序

在ANSI C中,qsort函数的原型是 #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)); 解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素.这个数组的元素个数由size指定. compar函数对qsort的比较操作进行定义,所以可以定制数字的比较,字符串的比较,甚至结构体

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

qsort对二维数组的排序

转自 :http://blog.csdn.net/slience_perseverance/article/details/6695048 qsort对二维数组排序与对以为数组排序是一样的几乎没有什么差别,而且后来想想定义一个二维数组所占的空间与定义一个机构体所占的空间是一样 的,所以没有必要用多维数组,直接用结构体数组就行. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math

qsort()函数(C)

qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原型: void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) ): base为初始地址,num为要进行排序元素个数,size为每个元素的大小,最后为必较函数 i

qsort用法

qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原型 void qsort(void *base, size_t nelem, size_t width, int (*Comp)(const void *,const void *)); 函数一共四个参数,没返回值. 一个典型的qsort的写法如下: void qsort(s, n, sizeof(s[0])

qsort

功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 (比较函数)指向函数的指针,用于确定排序的顺序 比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 s

C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法

这个问题屡次碰到解决之后再次遇到又忘记怎么弄了,这次打算彻底搞清楚. ·C 首先对所谓字符数组的排序应该是对(char)*a[]数组而非(char)a[][]进行的排序,后者是无法直接调用qsort实现其排序的. cmp函数写法: 1 int cmp(const void *a, const void *b){ 2 return strcmp(*((char**)a), *((char**)b)); 3 } 很容易想象字符串在初始化时已经被分配了特定的存储空间,我们用其首地址标识该字符串. 对于

C语言qsort和C++sort的用法小结和区别比较

第一项: qsort: (只是些概念,了解一下就可以) 基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低.集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 函数对buf 指向的数据按升序排序. 使用方法: void qsort( void *base, size_t num, size_t width, int (__cdecl *c

qsort函数用法

原文链接http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html qsort 功 能: 使用快速排序例程进行排序  用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针 用于确定排序的顺序 排序方法有