MST

星途 面试题库

面试题:C语言函数指针在排序算法中的应用

请使用C语言函数指针实现一个通用的排序函数,它能够对整数数组、浮点数数组进行升序和降序排序。要求分别编写比较整数和浮点数大小的函数,并通过函数指针传递给排序函数。
39.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}

上述代码实现了以下功能:

  1. 比较函数:定义了分别用于整数和浮点数升序、降序比较的函数。
  2. 交换函数swap函数用于交换任意类型的数据。
  3. 通用排序函数genericSort函数通过函数指针实现对不同类型数组的排序。
  4. 打印函数printIntArrayprintFloatArray分别用于打印整数数组和浮点数数组。
  5. 主函数:在main函数中对整数数组和浮点数数组进行升序和降序排序并打印结果。