分析:泛型的意思即为不特定于某种数据类型,那么数据的表示,大小关系的比较则是该题的重点。
typedef int (*PCmp)(void *vp1,void *vp2);//泛型比较
//泛型冒泡
void BubbleSort(void *arr,int len,int elemsize,PCmp cmp)
{
void *tmp = malloc(elemsize);//交换数据的中间变量
void *var1;//冒泡的第一个值的指针
void *var2;//冒泡的第二个值的指针
for(int i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
var1 = (char *)arr+j*elemsize;
var2 = (char *)arr + (j+1)*elemsize;
if(cmp(var1,var2) > 0) //交换数据
{
memcpy(tmp,var1,elemsize);
memcpy(var1,var2,elemsize);
memcpy(var2,tmp,elemsize);
}
}
}
}
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 main()
{
int arr[] = {3,5,7,9,0,12,45,6,78,23,44,10};
BubbleSort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(int),Cmp_int);
char *brr[] = {"abc","aaa","bcd","xyz","ccccc","hhh"};
BubbleSort(brr,sizeof(brr)/sizeof(brr[0]),sizeof(char *),Cmp_str);
return 0;
}