#include<stdio.h>
#include<string.h>
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; i<width; i++)
{
char 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; i<sz-1; i++)
{
for(j=0; j<sz-1-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<len; i++)
{
printf("%s ",arr2[i].name);
}
return 0;
}
调用cmp_int 函数结果
调用cmp_stu_name函数结果
调用cmp_stu_age函数结果