uiapp博客 个人网站,自助注册搭建网站,广州做网站价格,桐城市住房与建设网站qsort函数的功能#xff1a; qsort相较于冒泡排序法#xff0c;不仅效率更快#xff0c;而且能够比较不同类型的元素#xff0c;如#xff1a;浮点数#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的#xff0c;方便我们对指针数组有一个更深层次的理…qsort函数的功能 qsort相较于冒泡排序法不仅效率更快而且能够比较不同类型的元素如浮点数结构体等等。这里我们来模拟下qsort是如何实现这一功能的方便我们对指针数组有一个更深层次的理解。 以结构体中年龄的排序举例。
代码
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestdlib.h
#includestring.h
void Swap(char* buf1, char*buf2, size_t width)//传入数组1数组2的地址传入数组大小
{int i 0;for (i 0; i width; i) {char tmp *buf1;//交换元素*buf1 *buf2;*buf2 tmp;buf1;buf2;}
}
void bubble_sort2(void* base, size_t sz, size_t width, int (*cmp)(const void* p1, const void* p2))//模拟qsort函数
{int i 0;for (i 0; i sz - 1; i){int j 0;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);//交换所占的空间}}}
}
struct Stu//结构体
{char name[20];int age;
};
int cmp_stu_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)-age - ((struct Stu*)p2)-age;//比较元素大小
}
void test1()
{struct Stu arr[] { {zhangshan,18},{lisi,54},{wangwu,17} };int sz sizeof(arr) / sizeof(arr[0]);bubble_sort2(arr, sz, sizeof(arr[0]), cmp_stu_by_age);int i 0;for (i 0; i sz; i){printf(%s %d\n, arr[i].name, arr[i].age);}
}
int main()
{test1();return 0;
}
效果