qsort與cmp函式函式指標實現
阿新 • • 發佈:2021-12-16
\(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; }