利用泛型算法实现冒泡(腾讯面试题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hehongonghh/article/details/82663793

分析:泛型的意思即为不特定于某种数据类型,那么数据的表示,大小关系的比较则是该题的重点。

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

猜你喜欢

转载自blog.csdn.net/hehongonghh/article/details/82663793
今日推荐