#include <stdio.h>

// 第一种方式：直接调用排序函数
void sort_desc(int *a, int *b, int *c) {
    // 使用条件判断实现由大到小排序
    if (*a < *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    if (*a < *c) {
        int temp = *a;
        *a = *c;
        *c = temp;
    }
    if (*b < *c) {
        int temp = *b;
        *b = *c;
        *c = temp;
    }
}

// 第二种方式：使用指向函数的指针
void sort_desc_pointer(int *a, int *b, int *c) {
    // 使用条件判断实现由大到小排序
    if (*a < *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    if (*a < *c) {
        int temp = *a;
        *a = *c;
        *c = temp;
    }
    if (*b < *c) {
        int temp = *b;
        *b = *c;
        *c = temp;
    }
}

int main() {
    int a, b, c;
    int *ptr_a = &a, *ptr_b = &b, *ptr_c = &c;

    // 输入三个整数
    printf("请输入三个整数：");
    scanf("%d %d %d", &a, &b, &c);

    // 第一种方式：直接调用排序函数
    sort_desc(ptr_a, ptr_b, ptr_c);
    printf("排序后的结果（直接调用函数）：%d %d %d\n", a, b, c);

    // 重新输入三个整数进行排序
    printf("重新输入三个整数：");
    scanf("%d %d %d", &a, &b, &c);

    // 第二种方式：使用指向函数的指针实现排序
    void (*sort_ptr)(int *, int *, int *) = sort_desc_pointer;
    sort_ptr(ptr_a, ptr_b, ptr_c);  // 使用函数指针调用排序函数
    printf("排序后的结果（函数指针调用）：%d %d %d\n", a, b, c);

    return 0;
}
