C语言库函数中的排序和查找函数

之前在写程序的时候,无论是查找还是排序基本上都是自己写程序,很少或者说从来没有用过C语言中的库函数来搞定这种问题,今天看书发现C语言其实把这种问题已经解决了,我们需要做的就是调用这样的函数就可以了

对于查找的数据我们使用

void *bsearch(const void *key,const void *base,size_t num,
				size_t width,int (*cmp)(const void *v1,const void *v2));

上面的那个函数

其中key指向需要查找的那个元素,base是查找数据源(数组)的第一个元素,num指出数组包含的元素数,width指的是每个元素的宽度,cmp函数是比较函数

比较函数cmp必须满足两个要求

1、接受两个指向数据项的指针作为参数

2、返回这样的一个int值

a、如果元素1<元素2,则小于0

b、如果元素1=元素2,则等于0

c、如果元素1>元素2,则大于0

进行排序的的库函数qsort

void qsort(void *base,size_t num,size_t size,
	int (*cmp)(const void *element1,const void *element2));

和上面的参数基本上的意义相当

例子:

排序算法

//#define NDEBUG
#include 
#include 
#include 
#include 
#include 
#include 

int intcmp(const void *v1,const void *v2);
int main()
{
	srand(time(0));
	int max_number;
	printf("please input a number:\n");
	scanf("%d",&max_number);
	assert(max_number>0);
	int *a = (int *)malloc(sizeof(int)*max_number);
	for (int i=0;i

查找的例子:

这个必须是基于第一个排序完成,因为这个库函数要求,所要查询的数组必须是升序排列好的,因为是二分查找,二分查找要求查询的数据必须是有序的。

//#define NDEBUG
#include 
#include 
#include 
#include 
#include 
#include 

int intcmp(const void *v1,const void *v2);
int main()
{
	srand(time(0));
	int max_number;
	printf("please input a number:\n");
	scanf("%d",&max_number);
	assert(max_number>0);
	int *a = (int *)malloc(sizeof(int)*max_number);
	for (int i=0;i


你可能感兴趣的:(计算机编程,c++,C语言)