泛型冒泡(腾讯面试题)
泛型,顾名思义,就是不不拘泥于数据类型,通过一些通用的函数来实现各种需求,从而减少代码量,提高程序的通用性。
话不多说,直接上例子
#include<stdio.h>
#include<stdarg.h>
#include<stdlib.h>
#include<string.h>
typedef int(*Fun
)(void *vp1
,void *vp2
);
int Cmp_int(void *vp1
,void *vp2
)
{
return *(int *)vp1
- *(int *)vp2
;
}
int Cmp_str(void *vp1
,void *vp2
)
{
return strcmp(*(char **)vp1
,(*(char **)vp2
));
}
int Cmp_double(void *vp1
,void *vp2
)
{
#define EPS 0.000001
double tmp
= *(double *)vp1
- *(double *)vp2
;
if(tmp
> EPS
)
{
return 1;
}
if(tmp
= EPS
)
{
return 0;
}
if(tmp
< -EPS
)
{
return -1;
}
}
int Cmp_single_letter(void *vp1
,void *vp2
)
{
return *(char*)vp1
-*(char *)vp2
;
}
void Swap(void *vp1
,void *vp2
,int size
)
{
void *tmp
= malloc(size
);
memcpy(tmp
,vp1
,size
);
memcpy(vp1
,vp2
,size
);
memcpy(vp2
,tmp
,size
);
free(tmp
);
}
void BubbleSort(void *arr
,int len
,int elemsize
, Fun cmp
)
{
void *tmp
= malloc(elemsize
);
int flag
;
void *base
;
void *base_next
;
for(int i
=0;i
<len
-1;i
++)
{
flag
= 0;
for(int j
=0;j
<len
-i
-1;j
++)
{
base
= (char *)arr
+j
*elemsize
;
base_next
= (char *)arr
+(j
+1)*elemsize
;
if(cmp(base
,base_next
) > 0)
{
Swap(base
,base_next
,elemsize
);
flag
= 1;
}
}
if(flag
==0) break;
}
free(tmp
);
}
int main()
{
int arr
[]={6,3,2,6,4,7,3,8,3,787,3,6};
BubbleSort(arr
,sizeof(arr
)/sizeof(arr
[0]),sizeof(int),Cmp_int
);
for(int i
=0; i
<sizeof(arr
)/sizeof(arr
[0]); i
++)
{
printf("%d ",arr
[i
]);
}
puts(" ");
char *brr
[]={"ert","fd","udi","fdc","ruy"};
BubbleSort(brr
,sizeof(brr
)/sizeof(brr
[0]),sizeof(char *),Cmp_str
);
for(int i
=0; i
<sizeof(brr
)/sizeof(brr
[0]); i
++)
{
printf("%s ",brr
[i
]);
}
puts(" ");
double crr
[]={1.2,5.6,7.8,355.7,3.8,56.9};
BubbleSort(crr
,sizeof(crr
)/sizeof(crr
[0]),sizeof(double),Cmp_double
);
for(int i
=0; i
<sizeof(crr
)/sizeof(crr
[0]); i
++)
{
printf("%g ",crr
[i
]);
}
puts(" ");
char drr
[]={'c','e','d','a','b'};
BubbleSort(drr
,sizeof(drr
)/sizeof(drr
[0]),sizeof(char),Cmp_single_letter
);
for(int i
=0; i
<sizeof(drr
)/sizeof(drr
[0]); i
++)
{
printf("%c ",drr
[i
]);
}
puts(" ");
return 0;
}
程序运行结果如下:
希望对您有所帮助 不足之处还请多多指教!
转载请注明原文地址: https://yun.8miu.com/read-133795.html