利用泛型编程实现冒泡排序

    xiaoxiao2025-05-06  45

    泛型编程: 顾名思义即为一种通用通泛的算法,它可以实现不特定数据类型的问题,通俗来讲就是一函多用 下面我们用一个泛型冒泡举例

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int (*PCMP)(void *vp1,void *vp2); //泛型比较 void Bubble_Sort(void *str,int len,int elemsize,PCMP cmp)//str为需要排序的数组的首地址,len为数组长度,elemsize为每个元素的字节数,cmp为用户自定义比较函数 { void *tmp = malloc(elemsize); void *vp1;//冒泡的第一个值的指针 void *vp2;//冒泡的第二个值的指针 for(int i = 0;i < len - 1;i++) { void *base = (char *)str + i*elemsize;//遍历时保存数据的地址,因为char一个字节,所以强转为char *遍历时不会漏掉数据的字节数 for(int j = 0;j < len - 1 -i;j++) { vp1 = (char *)str + j*elemsize; vp2 = (char *)str + (j+1)*elemsize; if(cmp(vp1,vp2) > 0) { memcpy(tmp,vp1,elemsize);//文件拷贝实现数据交换 memcpy(vp1,vp2,elemsize); memcpy(vp2,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[] = {2,4,7,0,9,8,3,1,5,6}; Bubble_Sort(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]); } printf("\n"); char *str[10] = {"China","Japan","America","Korea","England", "Germany","France","Russia","Singapore","Malaysia"}; Bubble_Sort(str,sizeof(str)/sizeof(str[0]),sizeof(char *),Cmp_str); for(int i = 0;i < sizeof(str)/sizeof(str[0]);i++) { printf("%s\n",str[i]); } return 0; }
    最新回复(0)