写个C语言通用冒泡排序函数
时间: 2023-07-10 11:32:47 浏览: 110
以下是一个通用的 C 语言实现的冒泡排序函数:
```c
void bubble_sort(void *base, int size, int (*cmp)(const void *, const void *)) {
char *p = (char *)base;
int i, j;
for (i = 0; i < size - 1; i++) {
for (j = 0; j < size - 1 - i; j++) {
if (cmp(p + j * sizeof(void *), p + (j + 1) * sizeof(void *)) > 0) {
// 交换相邻的元素
void *tmp = malloc(sizeof(void *));
memcpy(tmp, p + j * sizeof(void *), sizeof(void *));
memcpy(p + j * sizeof(void *), p + (j + 1) * sizeof(void *), sizeof(void *));
memcpy(p + (j + 1) * sizeof(void *), tmp, sizeof(void *));
free(tmp);
}
}
}
}
```
该函数的参数说明如下:
- `base`:待排序的数组首元素的指针。
- `size`:数组中元素的个数。
- `cmp`:比较函数的指针,用于定义元素之间的比较方式,其参数类型应为 `const void*`,返回值类型应为 `int`,当第一个参数小于第二个参数时返回负数,当两个参数相等时返回零,当第一个参数大于第二个参数时返回正数。
该函数的实现采用了通用的指针操作,可以处理任意类型的元素。在比较两个元素时,使用了指针运算和类型转换,将元素的大小比较转换为了指针的大小比较。在交换两个元素时,使用了 `memcpy` 函数进行内存拷贝操作,可以处理任意类型的元素。
阅读全文