0
点赞
收藏
分享

微信扫一扫

冒泡排序(实现任何类型的排序)

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<string.h>

//实现任何类型排序
struct stu
{
char name[20];
int age;
}s[3] = { {"wangwu",20},{"zhangsan",10},{"lisi",30} };

int cmp_stu_age(const void* e1,const void*e2)
{
return *(int*)e1 - *(int*)e2;
}
int cmp_float(const void* e1, const void* e2)
{
return (int)(*(float*)e1 - *(float*)e2);
}
int cmp_stu_name(const void* e1, const void* e2)
{
return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
void swap(char* buf1,char* buf2,int size)
{
int j;
char temp;
for ( j = 0; j <size; j++)
{
temp = *buf1;
*buf1 = *buf2;
*buf2 = temp;
buf1++; buf2++;

}
}
void bubble_sort(void* base,int num,int size,int (*cmp)(const void*e1,const void* e2))
{
int i,j;
for ( i = 0; i < num-1; i++) //假如有十个元素,只进行9次排序
{
for (j = 0; j < num - i - 1; j++)
{
//2个元素的比较
if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0)
//交换
swap((char*)base + j * size, (char*)base + (j + 1) * size,size);
}
}
}
int main()
{
int i;
float f[] = { 5.0,8.0,4.0,10.0,9.0 };
int sz = sizeof(f) / sizeof(f[0]);
bubble_sort(f,sz,sizeof(f[0]),cmp_float);
printf("升序:\n");
for (i = 0; i < sz; i++)
{
printf("%.1f\t", f[i]);
}
printf("\n");

int ys = sizeof(s) / sizeof(s[0]);
bubble_sort(s, ys, sizeof(s[0]), cmp_stu_name);
printf("按姓名排序:\n");
for (i = 0; i < ys; i++)
{
printf("%s\t", s[i].name);
printf("%d\n", s[i].age);
}
return 0;
}
举报

相关推荐

0 条评论