1. 程式人生 > 其它 >qsort與cmp函式函式指標實現

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; 
	
}