面试题答案
一键面试#include <stdio.h>
// 比较整数大小,升序
int compareIntAsc(int a, int b) {
return a - b;
}
// 比较整数大小,降序
int compareIntDesc(int a, int b) {
return b - a;
}
// 比较浮点数大小,升序
int compareFloatAsc(float a, float b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
// 比较浮点数大小,降序
int compareFloatDesc(float a, float b) {
if (a < b) return 1;
if (a > b) return -1;
return 0;
}
// 通用的交换函数
void swap(void *a, void *b, size_t size) {
char temp[size];
memcpy(temp, a, size);
memcpy(a, b, size);
memcpy(b, temp, size);
}
// 通用的排序函数
void genericSort(void *arr, int n, size_t size, int (*compare)(void *, void *)) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
char *a = (char *)arr + j * size;
char *b = (char *)arr + (j + 1) * size;
if (compare(a, b) > 0) {
swap(a, b, size);
}
}
}
}
// 打印整数数组
void printIntArray(int *arr, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 打印浮点数数组
void printFloatArray(float *arr, int n) {
for (int i = 0; i < n; i++) {
printf("%.2f ", arr[i]);
}
printf("\n");
}
int main() {
int intArr[] = {5, 3, 7, 1, 9};
int intN = sizeof(intArr) / sizeof(intArr[0]);
float floatArr[] = {5.5, 3.3, 7.7, 1.1, 9.9};
int floatN = sizeof(floatArr) / sizeof(floatArr[0]);
// 整数升序排序
genericSort(intArr, intN, sizeof(int), (int (*)(void *, void *))compareIntAsc);
printf("整数升序排序结果: ");
printIntArray(intArr, intN);
// 整数降序排序
genericSort(intArr, intN, sizeof(int), (int (*)(void *, void *))compareIntDesc);
printf("整数降序排序结果: ");
printIntArray(intArr, intN);
// 浮点数升序排序
genericSort(floatArr, floatN, sizeof(float), (int (*)(void *, void *))compareFloatAsc);
printf("浮点数升序排序结果: ");
printFloatArray(floatArr, floatN);
// 浮点数降序排序
genericSort(floatArr, floatN, sizeof(float), (int (*)(void *, void *))compareFloatDesc);
printf("浮点数降序排序结果: ");
printFloatArray(floatArr, floatN);
return 0;
}
上述代码实现了以下功能:
- 比较函数:定义了分别用于整数和浮点数升序、降序比较的函数。
- 交换函数:
swap
函数用于交换任意类型的数据。 - 通用排序函数:
genericSort
函数通过函数指针实现对不同类型数组的排序。 - 打印函数:
printIntArray
和printFloatArray
分别用于打印整数数组和浮点数数组。 - 主函数:在
main
函数中对整数数组和浮点数数组进行升序和降序排序并打印结果。