模仿qsort的功能实现一个通用的冒泡排序

#include
#include

struct Stu //结构体
 {
    char name[20];
    int age;
 };

int cmp_stu_name(const void *e1, const void *e2)
{
    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);

}
int cmp_stu_age(const void *e1, const void *e2)
{
    return ((struct Stu*)e1)->age-((struct Stu*)e2)->age;

}
int cmp_int(const void *e1, const void *e2)
{

    return *(int*)e1 - *(int*)e2;

}

void Swap(char *p, char*q, int width)//交换函数
{
     int i = 0;
     for(i=0; ichar tmp = *(p+i);
        *(p+i) = *(q+i);
        *(q+i) = tmp;

     }

}
void bubble_sort(void *base, int sz, int width,int (*cmp)(const void* e1, const void*e2))
{
    int i = 0;
    int j = 0;
    for(i=0; i1; i++)
    {
        for(j=0; j1-i; j++)
        {
            if(cmp((char*)base+j*width,(char*)base+(j+1)*width)>0)//找到数组中的元素并进行判断
            {

                Swap((char*)base+j*width,(char*)base+(j+1)*width,width);

            }

        }
    }
}


int main()
{
    int  i = 0;
    int arr1[] = {1,5,9,4,3,8,7,2,6};
    struct Stu arr2[] = {{"lihuan",15},{"wanglong",12},
    {"dianqing",40}};
    int len = sizeof(arr2)/sizeof(arr2[0]);
    bubble_sort(arr2, len, sizeof(arr2[0]),cmp_stu_name);
        for(i=0; i"%s ",arr2[i].name);

        }

    return 0;

}

调用cmp_int 函数结果
模仿qsort的功能实现一个通用的冒泡排序_第1张图片
调用cmp_stu_name函数结果
模仿qsort的功能实现一个通用的冒泡排序_第2张图片
调用cmp_stu_age函数结果
模仿qsort的功能实现一个通用的冒泡排序_第3张图片

你可能感兴趣的:(模仿qsort的功能实现一个通用的冒泡排序)