如何用C语言实现:输入十个整数,将其中最小值与第一个数对换,把最大值与最后一个数对换?

用C语言实现:输入十个整数,将其中最小值与第一个数对换,把最大值与最后一个数对换,最后输出这10个数
看到有个答案中又将数组赋值给指针,不理解其作用


#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int numbers[10];
    int i, min, max, minIndex, maxIndex;

    printf("请输入十个整数:\n");
    for (i = 0; i < 10; i++) {
        printf("请输入第%d个数:", i + 1);
        scanf("%d", &numbers[i]);
    }

    min = numbers[0];
    max = numbers[0];
    minIndex = 0;
    maxIndex = 0;

    // 找到最小值和最大值及其索引
    for (i = 1; i < 10; i++) {
        if (numbers[i] < min) {
            min = numbers[i];
            minIndex = i;
        }
        if (numbers[i] > max) {
            max = numbers[i];
            maxIndex = i;
        }
    }

    // 将最小值与第一个数对换
    swap(&numbers[0], &numbers[minIndex]);
    // 将最大值与最后一个数对换
    swap(&numbers[9], &numbers[maxIndex]);

    printf("对换后的十个数为:\n");
    for (i = 0; i < 10; i++) {
        printf("%d ", numbers[i]);
    }

    return 0;
}

供参考:

#include <stdio.h>
void sort(int* a,int n)
{
    int i, temp, max_i = 0, min_i = 0;
    for (i = 0; i < n; i++)//查找最大最小值位置
    {
        if (a[i] > a[max_i])
            max_i = i;
        if (a[i] < a[min_i])
            min_i = i;
    }
    temp = a[0];  //第一个数与最小值兑换
    a[0] = a[min_i]; 
    a[min_i] = temp;
 
    if (max_i == 0) 
        max_i = min_i; //如果最大值在第一个位置,则现在已经移动到 a[min_i]位置了
 
    temp = a[n - 1];  //最大值与最后一个值兑换
    a[n - 1] = a[max_i]; 
    a[max_i] = temp;
 
    printf("调整后的数组为:\n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    return;
}
int main()
{
    int arr[10], * p;
    printf("请输入十个数:\n");
    for (int i = 0; i < 10; i++)
        scanf("%d", &arr[i]);
    p = arr;
    sort(p, 10);
    return 0;
}