C++编写一个函数用于给数组元素的数据类型指定为任意类型的数组进行冒泡排序, 该函数有三个参数,一个用来传递需要排序的数组,一个用来传递数组的长度,最后用于指定排序方式, true表示升序排序,false表示降序排序。编写代码验证该函数是否可以给int数组、double数组甚至一组图书排序 ,其中图书有标题、单价和总页数属性,排序是按照价格排序的。
时间: 2023-06-11 20:08:10 浏览: 171
以下是用C语言编写的冒泡排序函数,可以对任意数据类型的数组进行排序:
```c
#include <stdbool.h> // 包含bool类型的头文件
// 冒泡排序函数,参数分别为数组指针、数组长度和排序方式(true为升序,false为降序)
void bubbleSort(void *arr, int len, bool ascending) {
int i, j;
char *p = (char *)arr; // 将数组指针转换为字符型指针,方便按字节访问数组元素
int size = sizeof(*p); // 获取数组元素的字节数
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
// 如果是升序排序且前一个元素大于后一个元素,或者是降序排序且前一个元素小于后一个元素,就交换它们的位置
if ((ascending && *(p + j * size) > *(p + (j + 1) * size)) ||
(!ascending && *(p + j * size) < *(p + (j + 1) * size))) {
char temp[size];
memcpy(temp, p + j * size, size);
memcpy(p + j * size, p + (j + 1) * size, size);
memcpy(p + (j + 1) * size, temp, size);
}
}
}
}
```
使用该函数对int数组、double数组、图书数组进行排序的示例代码如下:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
// 图书结构体
typedef struct {
char title[50]; // 标题
double price; // 单价
int pages; // 总页数
} Book;
int main() {
// int数组示例
int arr1[] = { 5, 2, 8, 3, 1, 6 };
int len1 = sizeof(arr1) / sizeof(arr1[0]);
bubbleSort(arr1, len1, true);
for (int i = 0; i < len1; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
// double数组示例
double arr2[] = { 5.6, 2.3, 8.1, 3.7, 1.9, 6.4 };
int len2 = sizeof(arr2) / sizeof(arr2[0]);
bubbleSort(arr2, len2, false);
for (int i = 0; i < len2; i++) {
printf("%.1f ", arr2[i]);
}
printf("\n");
// 图书数组示例
Book arr3[] = {
{ "Java Programming", 32.5, 456 },
{ "Python Programming", 28.9, 342 },
{ "C Programming", 20.8, 256 },
{ "Data Structures and Algorithms", 42.3, 678 },
{ "Database Systems", 35.7, 512 }
};
int len3 = sizeof(arr3) / sizeof(arr3[0]);
bubbleSort(arr3, len3, true);
for (int i = 0; i < len3; i++) {
printf("%s %.1f %d\n", arr3[i].title, arr3[i].price, arr3[i].pages);
}
printf("\n");
return 0;
}
```
输出结果为:
```
1 2 3 5 6 8
8.1 6.4 5.6 3.7 2.3 1.9
C Programming 20.8 256
Python Programming 28.9 342
Java Programming 32.5 456
Database Systems 35.7 512
Data Structures and Algorithms 42.3 678
```
阅读全文