qsort与cmp函数函数指针实现

\(qsort\)函数原型

void qsort(void *base,size_t nitems,size_t size,int (*compar)(const void *,const void *));
//base - 待排序的数据序列起始地址 
//nitems - 数据数列中元素的个数
//size - 每个元素大小,以字节为单位
//compar - 用于回调元素比较函数的函数指针 

\(cmp\)函数的函数指针实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int comp_int(const void *i1,const void *i2)
{
	return (*(int *)i1-*(int *)i2);
}
int comp_str(const void *s1,const void *s2)
{
	return (strcmp(*(char **)s1,*(char **)s2));//注意字符串的指针数组访问要使用二重指针 
}
int main()
{
	int (*cmp)(const void *,const void *);
	int i;
	int a[]={15,42,93,54,15,66,37,8,81};
	char *str[]={"Tom","Mary","Allen","Jane","Suesan","Jimi"};
	
	cmp=comp_int;
	qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),cmp);
	for(i=0;i<sizeof(a)/sizeof(a[0]);++i)
	 printf("%d\t",a[i]);
	printf("\n");
	
	cmp=comp_str;
	qsort(str,sizeof(str)/sizeof(str[0]),sizeof(str[0]),cmp);
	for(i=0;i<sizeof(str)/sizeof(str[0]);++i)
	 printf("%s\t",str[i]);
	return 0; 
	
}
posted @ 2021-12-16 17:29  __Liuz  阅读(38)  评论(0编辑  收藏  举报